2017-08-25 21 views
7

Tôi đang cố gắng tìm hiểu async-await. Trong mã này -chức năng không đồng bộ - đang chờ đợi không chờ lời hứa

const myFun =() => { 
    let state = false; 

    setTimeout(() => {state = true}, 2000); 

    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
      if(state) { 
       resolve('State is true'); 
      } else { 
       reject('State is false'); 
      } 
     }, 3000); 
    }); 
} 

const getResult = async() => { 
    return await myFun(); 
} 

console.log(getResult()); 

lý do tại sao tôi nhận được đầu ra như -

Promise { <pending> } 

Thay vì một số giá trị? Không nên để chức năng getResult() chờ cho chức năng myFun() giải quyết giá trị lời hứa của nó?

Trả lời

8

Nếu bạn đang sử dụng async/await, tất cả các cuộc gọi của bạn phải sử dụng Promises hoặc async/await. Bạn không thể kỳ diệu nhận được kết quả không đồng bộ từ cuộc gọi đồng bộ hóa.

cuộc gọi cuối cùng của bạn cần phải được:

getResult().then(response => console.log(response)); 

Hoặc một cái gì đó như:

(async() => console.log(await getResult()))() 
+0

tại sao async cuối cùng (một với IIFE) trở thành đồng bộ nhưng không getResult() 'phương pháp của tôi'? –

+0

@hg_git Bởi vì nó được bọc trong một async IIFE, với một cuộc gọi đang chờ. Nó không trở thành đồng bộ, nó chỉ là đường hợp lý. –

+0

'getResult()' của tôi cũng có từ khóa 'async', và một cuộc gọi 'chờ đợi' .. –

Các vấn đề liên quan