在下面的代码中,我将Promise
与.then()
一起使用,但是它并不像我期望的那样等待setTimeout()
。
为什么async
/ await
等待setTimeout()
?看来await
等待Promise
解析,但.then()
却没有。有人可以提供一些细节吗?
function hello() {
console.log('hello');
}
function myPromiseFunction() {
return new Promise((resolve, reject) => {
setTimeout(function() {
console.log('hey');
resolve();
}, 2000);
});
}
myPromiseFunction().then(hello()); // Prints 'hello' then 'hey'
async function myAsyncFunction() {
await myPromiseFunction();
hello();
}
myAsyncFunction(); // Prints 'hey' then 'hello'
答案 0 :(得分:1)
myPromiseFunction().then(hello())
使用调用hello()
的结果作为对.then()
的回调。如果您希望将hello()
用作回调函数本身,请使用以下两种语法之一:
myPromiseFunction().then(() => hello());
myPromiseFunction().then(hello);
请注意,第二种语法无提示地将参数传递给hello()
-由Promise
解析的值。在您的示例中,这不是问题(因为hello()
根本不检查使用其参数),但这可能是造成问题的原因。
答案 1 :(得分:1)
尝试
myPromiseFunction().then(()=>hello())
您正在调用一个函数,而不提供要调用的函数。
答案 2 :(得分:0)
您正在使用()来打招呼
.then(hello());
hello被调用并返回void,然后将void作为回调函数传递给then。