首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Async vs then in Promise resolve

Async vs then in Promise resolve
EN

Stack Overflow用户
提问于 2019-02-14 08:30:22
回答 3查看 60关注 0票数 0

在下面的代码中,我使用了一个带有.then()Promise,但它并没有像我预期的那样等待setTimeout()

但是为什么async/await要等待setTimeout()呢?看起来await在等待Promise解析,但.then()没有。有人能提供一些细节吗?

代码语言:javascript
复制
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'

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-14 08:37:58

myPromiseFunction().then(hello())使用调用hello()的结果作为.then()的回调。如果您希望使用hello()作为回调函数本身,请使用以下两种语法之一:

代码语言:javascript
复制
myPromiseFunction().then(() => hello());
代码语言:javascript
复制
myPromiseFunction().then(hello);

请注意,第二个语法将一个参数静默地传递给hello() -由Promise解析的值。在您的示例中,这不是问题(因为hello()根本不使用其参数进行检查),但这可能是导致问题的原因。

票数 1
EN

Stack Overflow用户

发布于 2019-02-14 08:38:16

试一试

代码语言:javascript
复制
myPromiseFunction().then(()=>hello())

您正在调用函数,而不是提供要调用的函数。

票数 1
EN

Stack Overflow用户

发布于 2019-02-14 09:27:14

您正在使用()调用hello

代码语言:javascript
复制
.then(hello());

hello被调用并返回void,然后将void作为回调函数传递给then。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54681527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档