使用异步/等待有什么好处?

时间:2019-06-29 10:17:57

标签: javascript asynchronous async-await

我正在阅读几篇文章,并观看了一些有关如何在JavaScript中使用async / await的视频,似乎唯一的原因是要在同步代码中转换异步代码(并使代码更具可读性,但这并不旨在讨论。这个问题)。

因此,我想了解使用这些语句是否还有更多原因,因为据我了解,如果我们有进行异步调用并改善代码性能的承诺,为什么我们要再次将其转换为同步语句代码?

3 个答案:

答案 0 :(得分:3)

可以认为它不是实际上是同步的。当awaitasync的东西时,它将被添加到微任务队列中。它不在主线程上运行,这意味着可能发生其他事情(单击事件,渲染等)

这是一场精彩的演讲,可以进一步详细解释 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)

})()