【问题标题】:Proper use of async JS to ensure function calls wait for previous functions to complete (resolve?)正确使用 async JS 以确保函数调用等待之前的函数完成(解决?)
【发布时间】:2022-02-04 23:17:00
【问题描述】:

尝试学习正确的 async/await JavaScript 以在序列中的早期函数将被延迟时按顺序运行函数(使用 setTimeout 进行模拟)。我没有得到预期的结果(仍然得到“第一”、“第二”、“这应该首先运行?” - 见代码)。

我错过了什么?我对此有错误的想法吗?

提前致谢!

const zeroFunction = () => {
    setTimeout(() => {
        return new Promise((resolve) => {
            console.log("This should run first?");
            resolve();
        }); 
}, 2000)}

const firstFunction = () => {
    return new Promise((resolve) => {
        console.log("first");
        resolve();
    }) 
}

const secondFunction = () => {
    return new Promise((resolve) => {
        console.log("second");
        resolve();
    })
}

async function fnAsync() {
    await zeroFunction();
    await firstFunction();
    secondFunction();
}

fnAsync();

【问题讨论】:

  • zeroFunction 什么也不返回。它应该返回一个 Promise。

标签: javascript async-await


【解决方案1】:

zeroFunction 当前正在隐式返回 undefined,而不是 Promise。反转 setTimeoutPromise 构造函数的包装,它应该可以按预期工作。

const zeroFunction = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log("This should run first?")
      resolve()
    }, 2000)
  })
}
const firstFunction = () => {
  return new Promise((resolve) => {
    console.log("first")
    resolve()
  })
}

const secondFunction = () => {
  return new Promise((resolve) => {
    console.log("second")
    resolve()
  })
}

async function fnAsync() {
  await zeroFunction()
  await firstFunction()
  secondFunction()
}

fnAsync()

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多