Попробовал обратный вызов против обещания_для async_await и обнаружил, что обратный вызов является самым быстрым - это правда? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытался сравнить Node.js callback против promise_then против async_await и обнаружил, что callback - самый быстрый. Это правда? Не уверен, правильно ли я подхожу к этому.

Я создал функцию add для всех трех callback, promise_then и async_await. Когда следующий код был запущен в узле и результаты распечатывались как console.log, сначала печатался callback, затем promise_then и, наконец, async_await, хотя я организовал вызовы функций так, что callback будет вызван последним ,

// promise_then
const add_promise = (a, b) => {
    return new Promise((resolve, reject) => {
        resolve(a + b)
    })
}

// async_await
const add_async_await = async() => {
    const sum = await add_promise(1, 99)
    const sum2 = await add_promise(sum, 50)
    const sum3 = await add_promise(sum2, 3)
    return sum3
}

// callback
function add_callback(a, b, callback) {
    callback(a + b)
}

add_async_await().then((result) => {
    console.log('result await', result) // await third fastest (3)??
}).catch((e) => {
    console.log('e', e)
})

add_promise(1,99).then((sum) => {
    add_promise(sum, 50).then((sum2) => {
        add_promise(sum2, 3).then((sum3) => {
            console.log('result promise', sum3) // promise second fastest (2)??
        })
    })
})

add_callback(1, 99, function(sum) {
    add_callback(sum, 50, function(sum2) {
        add_callback(sum2, 3, function(sum3) {
            console.log('result callback', sum3) // callback fastest (1)??
        })
    })
})

Приведенный выше код выводит следующее:

result callback 153
result promise 153
result await 153

При условии порядка вывода это означает, что callback является самым быстрым, за которым следует promise и, наконец, await? Или, может быть, порядок console.log не имеет значения?

1 Ответ

2 голосов
/ 17 апреля 2020

Вы должны рассмотреть некоторые моменты, тогда вы понимаете.

  1. обратных вызовов, которые могут быть либо асинхронными, либо синхронными. Возможно, вы используете синхронный обратный вызов.
  2. Если у вас есть асинхронное c событие, которое заканчивается только один раз (например, ajax call) over callbacks, тогда обещания намного лучше, чем callbacks, потому что их гораздо проще составить
...