Каковы преимущества использования async / await? - PullRequest
2 голосов
/ 29 июня 2019

Я читаю несколько статей и смотрю несколько видео о том, как использовать async / await в JavaScript, и кажется, что единственная причина - преобразовать асинхронный код в синхронный код (и сделать код более читабельным, но это не предназначено для обсужденияв этом вопросе).

Итак, я хотел бы понять, есть ли еще причины для использования этих операторов, потому что, насколько я понимаю, если у нас есть Promises для выполнения асинхронных вызовов и повышения производительности нашего кода, почему мы хотим преобразовать егоопять к синхронному коду?

Ответы [ 3 ]

3 голосов
/ 29 июня 2019

Это можно считать не на самом деле синхронным. Когда вы await что-то, что async, оно добавляется в очередь микрозадач. Он не запускается в главном потоке, что означает, что могут происходить другие события (события щелчка, рендеринг и т. Д.)

Вот фантастический разговор, который может объяснить его более подробно https://www.youtube.com/watch?v=cCOL7MC4Pl0

await/async часто называют синтаксическим сахаром, и давайте что-то ждать (например, вызов API), создавая иллюзию, что это синхронно.

1 голос
/ 29 июня 2019

Я думаю, что async await повышает читабельность кода.В некоторых случаях использования обещания обратного вызова вы можете оказаться в очень длинной цепочке, которую можно назвать ямой обратного вызова.Вам решать, использовать ли async-await.

0 голосов
/ 29 июня 2019

Иногда вам нужно несколько действий внутри отдельных функций, некоторые из них могут быть асинхронными, а некоторые - синхронными.Допустим, у вас есть следующий код с обещаниями.

getUser().then(user => {
    getOrders({
        user: user
    }).then(orders => {
        console.log(orders)
    })
})

что теперь, если вы хотите, чтобы заказы выбирались только в том случае, если условие истинно, но пусть дальнейший код выполняется как есть, тогда, если вы используете обещания,вам нужно создать отдельную функцию и затем вызывать эту функцию следующим образом

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)

})()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...