await
позволяет писать асинхронный код несколько синхронно:
async function doIt() {
let name = await Login.findOne();
console.log(name);
// You can use the result here
// Or, if you return it, then it becomes the resolved value
// of the promise that this async tagged function returns
return name;
}
// so you can use `.then()` to get that resolved value here
doIt().then(name => {
// result here
}).catch(err => {
console.log(err);
});
Версия простого обещания будет выглядеть так:
function doIt() {
// make the query, return the promise
return Login.findOne();
}
// so you can use `.then()` to get that resolved value here
doIt().then(name => {
// result here
}).catch(err => {
console.log(err);
});
Сохранитьпомните, что await
может использоваться только внутри функции async
, поэтому рано или поздно вам все равно придется использовать .then()
, чтобы увидеть, когда все будет сделано.Но во многих случаях использование await
может упростить последовательные асинхронные операции.
Имеет гораздо большую разницу, если у вас есть несколько последовательных асинхронных операций:
async function doIt() {
let result1 = await someFunc1();
let result2 = await someFunc2(result1 + 10);
return someFunc3(result2 * 100);
}
Без ожидания это будетbe:
function doIt() {
return someFunc1().then(result1 => {
return someFunc2(result1 + 10);
}).then(result2 => {
return someFunc3(result2 * 100);
});
}
Добавьте больше логики для обработки промежуточных результатов или ветвления логического потока, и это становится все более и более сложным без await
.
Дополнительные примеры см. Как связать и поделиться предыдущими результатами с Promises и насколько проще версия await
.