В настоящее время мы используем асинхронное ожидание в ES2017 или ES8 и node js ≥ 8.x.

Если вы хотите узнать о ECMAScript, его связи с JavaScript, сведениях о его версии и т. д., перейдите по следующим ссылкам.





Зачем нам обещание тогда в JavaScript

По умолчанию JavaScript или node js являются неблокирующим вводом-выводом и асинхронными.

Чтобы узнать об основной архитектуре JavaScript или node js, прочитайте следующий блог.



Согласно базовой архитектуре JavaScript или node js, он использует цикл событий для обработки в фоновом режиме как однопоточный язык.

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

Например, давайте возьмем следующий фрагмент кода, чтобы объяснить обещание, а затем использовать fetch API в основном javascript.

callApi() {
return new Promise( (resolve,reject) =› {
this.$http.get( “‹api_url›” ).then( (response) =› {
разрешить(ответ)
}).catch(error=›{
отклонить(ошибка)
})
})
}
processData(данные) {
//здесь идет логика…
}
submit() {
callApi().then(response =› {
let data = response.data
processData(данные)
}).catch( error =› {
console.log(error)
})
}

Отправить()

Цель асинхронного ожидания

В приведенном выше фрагменте кода я использовал axios npm для выполнения http-вызовов в vue js. В приведенном выше примере используется обещание. Но каждый раз, когда нам нужно обещание, а затем для выполнения вызовов API или длительного процесса, такого как взаимодействие с базой данных в узле js. Если мы используем множество обещаний, то логика всегда будет внутри блока или даже на втором уровне, а затем в блоке.

Блочное кодирование с использованием обещаний затрудняет понимание логики вызовов API и сложности в обслуживании.

Чтобы избежать сложностей с блочным кодированием, в игру вступает асинхронное ожидание.

Как использовать асинхронное ожидание

Ключевое слово Async следует использовать перед именем функции, в которой будет выполняться вызов API. И перед функцией вызовов API нужно упомянуть ключевое слово await для ожидания результата.

Например, давайте возьмем предыдущий пример с асинхронным ожиданием вместо обещания.

callApi() {
return new Promise( (resolve,reject) =› {
this.$http.get( “‹api_url›” ).then( (response) =› {
разрешить(ответ)
}).catch(error=›{
отклонить(ошибка)
})
})
}
processData(данные) {
//здесь идет логика…
}
async submit() {
try {
let response = await callApi()
let data = response .data
processData(данные)
} catch(ошибка) {

}
}

Отправить()

Полифилл для асинхронного ожидания

Если версия браузера или узла js не поддерживает асинхронное ожидание, мы можем использовать любую из следующих библиотек полифилла.







В обеих нодах js ‹ 8.x и ES ‹ 8 мы тогда использовали промис. Как я уже упоминал, если нам нужно использовать async await в браузерах, поддерживаемых node js ‹ 8.x и ES ‹ 8, нам понадобится любая из трех вышеуказанных библиотек полифилла.

Когда мы можем использовать асинхронное ожидание

Для следующих сценариев мы можем использовать асинхронное ожидание.

  1. Всякий раз, когда нам приходится обрабатывать данные, поступающие из ответа API, мы можем использовать асинхронное ожидание.
  2. Всякий раз, когда сервер API взаимодействует с базой данных, мы можем использовать асинхронное ожидание.

Когда мы не используем асинхронное ожидание

  1. Если нам не нужен ответ API для следующей строки вызова API, нам не нужно использовать асинхронное ожидание.
  2. Если нам нужен ответ первого вызова API на второй вызов API, мы можем использовать асинхронное ожидание.
  3. Если мы делаем 3 вызова API и нам не нужны ответы от этих трех для следующей строки вызовов API, нам не нужно использовать асинхронное ожидание.
  4. Если мы делаем 3 вызова API и нам нужно вызвать функцию после выполнения 3 вызовов API, нам не нужно использовать асинхронное ожидание. Вместо этого мы можем использовать Promise.all().

Пример Promise.all()

callApi(api_url) {
return new Promise( (resolve,reject) =› {
this.$http.get(api_url).then( (response) =› {
resolve(response )
}).catch(error=›{
reject(error)
})
})
}
processData(data) {
//здесь идет логика…
}
async submit() {
try {
let promise1 = callApi( «‹api_url1›»)
let promise2 = callApi("‹api_url2›"" )
let promise3 = callApi( "‹api_url3›"" )
let responses = await promise.all([promise1, promise2, promise3])
let ids = []
for(let i=0;i‹responses.length;i++) {
ids.push(responses[i].data.id)
}
processData( ids )
} catch( error ) {
}
}
submit()

Заключение

До сих пор в этом блоге мы видели обещания, асинхронное ожидание, историю версий es, базовую архитектуру javascript/node js и т. д.

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

Прежде чем использовать асинхронное ожидание, прочтите разделы «Когда мы не используем асинхронное ожидание» и «Примеры Promise.all()» в этом блоге.

Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь присылать мне свои вопросы, вопросы и предложения по адресу [email protected].

Спасибо.