Если вы разработчик JavaScript, то наверняка слышали об этом термине, и если не беспокойтесь, я здесь, чтобы объяснить, как он работает и когда его использовать.
Обещание
Мы все знаем, что JavaScript является синхронным и однопоточным. Но промисы позволяют JavaScript выполнять этот код асинхронно. Вместо того, чтобы возвращать прямой результат, он возвращает обещание.
Потом( )
Обычно мы получаем результат обещания, используя then()
, передавая в нем функцию обратного вызова. Его можно либо решить, либо отклонить.
Возьмем пример
function run() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(99);
console.log('Done');
}, 2000);
});
}
console.log('start');
run().then((result) => {
console.log(result);
console.log('end');
});
/* Output:
start
Done (after 2 sec)
99
end
*/
Когда я вызвал функцию запуска, я передал функцию обратного вызова в then(), она принимает результат в качестве аргумента и позволяет вывести его на консоль. После регистрации результата я сделал свою следующую работу. Вот как мы получаем результат обещания, используя then().
Асинхронно и ждать
Сделаем то же самое с помощью async и await, здесь then() не нужно.
function run() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(99);
console.log('Done');
}, 2000);
});
}
async function main() {
console.log('start');
const result = await run();
console.log(result);
console.log('end');
}
main();
/* Output:
start
Done (after 2 sec)
99
end
*/
Ключевое слово await работает только в асинхронной функции, поэтому я делаю основную функцию асинхронной. Теперь мы должны поместить ключевое слово await перед вызовом функции запуска, который возвращает обещание. Из-за ключевого слова await поток будет ждать там, пока не получит разрешение или отклонение.