在使用Async/AWait运行一些我无法解决的函数时,我看到意外的输出.

代码如下所示:

const delayToRun = async() => {
  console.log('first delay');
  let p = await new Promise((resolve, reject) => {
    setTimeout(() => resolve('Done'), 2000);
  });
  console.log('second delay');
  return p;
};

const start = async() => {
  for (let i = 0; i < 2; i++) {
    const res = await delayToRun();
    console.log(res);
    console.log('--------------------------------');
  }
};

start();
start();

输出:

first delay
first delay
second delay
Done
--------------------------------
first delay
second delay
Done
--------------------------------
first delay
second delay
Done
--------------------------------
second delay
Done
--------------------------------

对我来说,所有块都显示:第一个、第二个、完成. 但第一个似乎是在开始时开始,然后在结束时完成.

有谁能解释一下这件事吗?

谢谢

推荐答案

您没有对start()函数执行await,所以start()的第二个实例紧跟在第一个实例之后触发.

以供比较:

delayToRun = async() => {
  console.log("first delay");
  let p = await new Promise((resolve, reject) => {
    setTimeout(() => resolve("Done"), 2000)
  });
  console.log("second delay");
  return p;
}

start = async() => {
  for (let i = 0; i < 2; i++) {
    const res = await delayToRun();
    console.log(res);
    console.log("--------------------------------");
  }
}

(async () => {
  await start();
  await start();
})();

Javascript相关问答推荐

Phaser框架-将子对象附加到Actor

单击更新页面的按钮后,页面刷新;测试/断言超时,有两个标题,但没有一个标题

没有输出到带有chrome.Devtools扩展的控制台

防止用户在selectizeInput中取消 Select 选项

如何在Javascript中的控制台上以一行形式打印循环的结果

为什么promise对js中的错误有一个奇怪的优先级?

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

如何在coCos2d-x中更正此错误

当id匹配时对属性值求和并使用JavaScript返回结果

Eval vs函数()返回语义

NG/Express API路由处理程序停止工作

如何在Bootstrap中减少网格系统中单个div的宽度

触发异步函数后不能显示数据

在D3条形图中对具有相同X值的多条记录进行分组

如何根据输入数量正确显示alert ?

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError

需要刷新以查看Mern堆栈应用程序中的更改

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中

将数据添加到数据库时不输出