Cách dùng await thay thế Promise.all

Hi ạ, anh chị giải thích giúp em tại sao lại có sự khác biệt trong 2 cách này với ạ. Mục đích của em là dùng await để thay thế Promise.all. Em cảm ơn (Em mới học promise)

const ABC = _ => {
    return new Promise(resolve => {
        setTimeout(_ => {
            resolve("Hello");
        }, 5000);
   });
}

const Test1 = async () => {
    const a = ABC();
    const b = ABC();
    return await a + await b;
    // Tương đương với Promise.all([a, b])
    // a, b đều chạy cùng lúc => Mất 5s để return
}

const Test2 = async () => {
    return await ABC() + await ABC();
    // chạy tuần tự => Mất 10s để return
}
Test1().then(x => console.log(x)); // 5s ra kết quả
Test2().then(x => console.log(x)); // 10s mới ra kết quả

Trong Test2 thì ABC() thực thi xong trả về một Promise rồi gán object promise này vào a

.
.
.
.
Cho em hỏi thêm: Trong js mọi thứ đều là object. Function cũng là object, vậy promise chính xác là một object hay một function? Trên MDN docs thì định nghĩa promise là object "The Promise object represents the eventual completion (or failure) of an asynchronous operation and its resulting value" nhưng một số web lại nói nó là object hoặc function https://promisesaplus.com/

Test1 và Test2 rõ ràng là khác nhau
ở hàm 1 là khởi tạo 2 promise từ trước, sau 5s, promise 1 fullfill, ngay lúc đó promise 2 cũng fullfill luôn
còn ở hàm 2, phải đợi promise 1 fullfill xong rồi mới bắt đầu khởi tạo promise 2 rồi đợi fullfill

trong câu hỏi đã có câu trả lời rồi còn gì?

rồi trên này nói nó không phải function, cũng không phải object, mà nói nó là cái gì đó khác thì sao? rồi bạn tin ai? hay là sẽ tiếp tục hỏi ở một chỗ khác

8 Likes

Quá hay, cảm ơn anh đã giải thích :heart_eyes: Nhưng object mang nghĩa rộng hơn ạ, nếu nói promise là function thì mang nghĩa cụ thể hơn.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?