在下面的代码中,我使用了一个带有.then()的Promise,但它并没有像我预期的那样等待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'
发布于 2019-02-14 08:37:58
myPromiseFunction().then(hello())使用调用hello()的结果作为.then()的回调。如果您希望使用hello()作为回调函数本身,请使用以下两种语法之一:
myPromiseFunction().then(() => hello());myPromiseFunction().then(hello);请注意,第二个语法将一个参数静默地传递给hello() -由Promise解析的值。在您的示例中,这不是问题(因为hello()根本不使用其参数进行检查),但这可能是导致问题的原因。
发布于 2019-02-14 08:38:16
试一试
myPromiseFunction().then(()=>hello())您正在调用函数,而不是提供要调用的函数。
发布于 2019-02-14 09:27:14
您正在使用()调用hello
.then(hello());hello被调用并返回void,然后将void作为回调函数传递给then。
https://stackoverflow.com/questions/54681527
复制相似问题