首页 > 解决方案 > 使用异步等待模式重新调整承诺,并有一些延迟

问题描述

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

我对 JavaScript 中 async-await 模式的理解是,从异步函数返回的任何值都作为 Promise 返回,因此该函数应将值 100 作为 Promise 返回,因此使用的最后一条语句.then应显示 100,但事实并非如此.

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

async function f() {

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

}

f().then(alert); // 100

标签: javascriptasynchronouspromiseasync-awaites6-promise

解决方案


您没有返回任何内容,delayedResponse因此导致undefined.

相反,为了实现您的期望 - 您可以显式创建一个承诺并使用超时解决一个值;

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

f().then(alert); // 100


推荐阅读