使用异步等待模式重新调整承诺,但有一些延迟

Sun*_*nil 2 javascript asynchronous promise async-await es6-promise

我正在尝试从调用rest api 的方法返回一些测试数据。为了模拟其余 api 调用,我添加了一些延迟以使用异步等待模式返回承诺,但它没有按预期工作。

我对 JavaScript 中异步等待模式的理解是,从异步函数返回的任何值都会作为承诺返回,因此函数应该将值 100 作为承诺返回,因此最后一个语句 using 应该.then显示 100,但事实并非如此。

问题 下面的代码片段有什么问题导致最后一行代码中显示警报而undefined不是 100?

async function f() {

  function delayedResponse() {
    setTimeout(function() { return 100}, 5000);
  }
  return await delayedResponse();

}

f().then(alert); // 100
Run Code Online (Sandbox Code Playgroud)

fal*_*sky 5

您没有返回任何内容,delayedResponse因此结果是undefined.

相反,为了实现您的期望 - 您可以显式创建 Promise使用超时解析值;

async function f() {
  return new Promise(resolve => {
    setTimeout(function() { resolve(100)}, 5000);
  }); 
}

f().then(alert); // 100
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,您可以执行“setTimeout(resolve, 5000, 100);”,而不是为“setTimeout(function() {resolve(100)}, 5000);”声明单独的回调函数。 (2认同)