异步vs然后Promise解决

时间:2019-02-14 00:30:22

标签: javascript promise async-await

在下面的代码中,我将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'

3 个答案:

答案 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。