作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个简单的异步函数:第一:
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/
我是一名优秀的程序员,十分优秀!