gpt4 book ai didi

javascript - 如何用async/await进行一一异步调用?

转载 作者:行者123 更新时间:2023-11-28 17:13:35 25 4
gpt4 key购买 nike

我有两个简单的异步函数:第一:

const first = async () => {
setTimeout(() => {
console.log(1)
},2000);
}

第二:

const second = async () => {
console.log(2);
}

我试图保留第二个功能,直到第一个功能完成。我的代码:

router.post('/', errorHandler(async (req, res) => {
try {

await first();
await second();

} catch (err) {
console.log(err);
}
})
);

但是第二个函数首先执行。我如何使用 await 才能得到我想要的东西?预先感谢您!

最佳答案

问题是它无法知道你的代码何时完成。如果将第一个函数更改为如下所示,它应该可以工作。

const first = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1);
resolve();
},2000);
});
}

基本上,这是返回一个 promise ,该 promise 将在超时完成后解决。这样,您的 await 将等待 resolve 函数被调用。

您还可以执行类似以下操作将 setTimeout 转换为 Promise。

const timeout = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), ms);
});
}

const first = async () => {
await timeout(2000);
console.log(1);
}

但最大的问题是你试图将回调和 promise 结合起来(await)。因此,在某些时候,您必须将该回调 (setTimeout) 转换为 Promise,以便您可以等待它。

关于javascript - 如何用async/await进行一一异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com