我正在阅读几篇文章,并观看了一些有关如何在JavaScript中使用async / await的视频,似乎唯一的原因是要在同步代码中转换异步代码(并使代码更具可读性,但这并不旨在讨论。这个问题)。
因此,我想了解使用这些语句是否还有更多原因,因为据我了解,如果我们有进行异步调用并改善代码性能的承诺,为什么我们要再次将其转换为同步语句代码?
答案 0 :(得分:3)
可以认为它不是实际上是同步的。当await
是async
的东西时,它将被添加到微任务队列中。它不在主线程上运行,这意味着可能发生其他事情(单击事件,渲染等)
这是一场精彩的演讲,可以进一步详细解释 https://www.youtube.com/watch?v=cCOL7MC4Pl0
await/async
通常被称为语法糖,让我们等待某些事情(例如API调用),给我们错觉是同步的。
答案 1 :(得分:1)
我认为异步等待可以提高代码的可读性。在某些promise-callback用法中,您会发现自己处于很长的链中,这可以称为回调陷阱。由您决定是否使用async-await。
答案 2 :(得分:-1)
有时您需要在单个函数中执行多个操作,其中一些操作可能是异步的,有些可能是同步的。假设您的代码带有promise。
getUser().then(user => {
getOrders({
user: user
}).then(orders => {
console.log(orders)
})
})
现在,如果您希望仅在条件为真的情况下才要提取订单,但是让更多代码按原样运行,那么如果您使用的是Promise,则必须创建一个单独的函数,然后像这样调用该函数< / p>
function logOrders(orders) {
console.log(orders)
}
getUser().then(user => {
if (user.hasOrders) {
getOrders({
user: user
}).then(logOrders)
} else {
logOrders([])
}
})
但是使用async / await可以这样做
(async () => {
const user = await getUser();
let orders = [];
if (user.hasOrders) {
orders = await getOrders({
user: user
})
}
console.log(orders)
})()