async-await
ведет себя аналогично цепочке .then()
, await
ожидает обещания, которое будет разрешено или отклонено, а затем продолжает процесс, как .then()
продолжить при разрешении обещания и .catch()
при отклонении обещания.
await
возвращает тот же результат, который .then()
получает при разрешении обещания, то есть:
foo().then( function(result){}); // got result here
result = await foo(); // will get same result here too as in above function.
аналогично catch(err)
в try-catch
получает ту же ошибку, что и .catch( function(err) {})
в .then()-.catch()
.
Узнайте больше об async-await здесь и здесь .
Чтобы преобразовать ваш .then () в async-await, просто сделайте это:
(async function () {
try {
const { url } = await server.listen(port);
console.log(`Server ready at ${url}`);
} catch(e) {
// handle errors
}
})(); // This is [IIFE][3]. In this case it's better to have IIFE then regular function, as functions needed to be called.
async-await как функция:
async function startServer() {
try {
const { url } = await server.listen(port);
console.log(`Server ready at ${url}`);
} catch(e) {
// handle errors
}
}
startServer(); // Not an IIFE