当前位置: 首页 > 知识库问答 >
问题:

在同一个异步函数中使用多个setTimeout/Timer重置[重复]

陆文斌
2023-03-14

在尝试理解async/await时,我尝试了这段代码,但它的行为与我预期的不一样。

let test = async function () {
  let result = new Promise((resolve, reject) => {
    setTimeout(() => resolve('done1'), 2000)
  })

  let result2 = new Promise((resolve, reject) => {

    setTimeout(() => resolve('done2'), 2500)
  })

  let x1 = await result
  console.log(x1)


  let x2 = await result2
  console.log(x2)

}

test()

我希望控制台在2秒后显示done1,然后在done1后2.5秒显示done2。相反,它在2秒内显示done1,在那之后0.5秒显示done2。为什么它会这样,因为我在显示第一个之后等待第二个setTimeout?

共有1个答案

巫马正卿
2023-03-14

当您创建一个new Promise时,它开始运行它的代码。当您在里面有setTimeout时,计时器实际上正在运行。当您在调用Promise之前使用wait时,它会等待,直到promise将被解决或拒绝,然后工作。

你需要创造每一个promise,然后等待它。

let test = async function () {

  let result = new Promise((resolve, reject) => {
    setTimeout(() => resolve('done1'), 2000);
  });
  
  let x1 = await result;
  console.log(x1);

  let result2 = new Promise((resolve, reject) => {
    setTimeout(() => resolve('done2'), 2500);
  });

  let x2 = await result2;
  console.log(x2);

}

test()
 类似资料:
  • 我试图利用es7异步功能,即。 在这里,所有promise*函数都进行ajax调用,并返回或如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用以某种方式返回它们的值。

  • 我试图写一个异步函数,使多个读取,等待所有完成,然后返回JSON结果作为一个数组。这是我到目前为止所拥有的: 文件1。js 应用程序编程接口。js util.js 当执行在调试器处暂停时,我使用Chrome的开发工具检查,它正确地是由3个对象组成的数组,但如果我检查,它奇怪地在控制台中返回一个

  • 是的,以前有人问过这个问题,但我找不到任何解决办法。所以我刚买了一个新的VPS(Ubuntu14.04)来开发,因为我不想再在我的主VPS上工作了 Ive copy将我的主VPS(一切正常)中的每个文件粘贴到我的新VPS,安装了所有内容,现在想启动我的nodejs应用程序。 但是,我收到以下错误: SyntaxError:意外的令牌函数 我的代码: 很明显,help me()函数只是一个测试函数,

  • 我在一个类中有多个同步的静态方法。 现在只允许一个线程执行类中的任何同步函数。这是不有效的,因为这些函数彼此独立并且可以并行运行。我如何才能使它们彼此独立,但每个方法只允许一个线程,而对类的更改最少。

  • 我是ES6新手,所以我学习Javascript语句。 在测试async/await时,我发现了一些奇怪的行为。 我这样写代码, 输出在这里, 我定义async来运行,并等待每一行同步工作。 预期产量在这里, 谢谢。

  • 转换为任务返回委托的异步lambda表达式不能返回值