Вы можете думать о await
как о "распутывании" a Promise
.На данный момент ваш код не использует Promise
и, следовательно, await
не будет работать.Вместо этого вы можете заключить ваше setTimeout
в обещание и resolve
ваше обещание, когда оно будет выполнено.Затем, используя await
, вы можете получить разрешенное значение из Promise
(только после того, как оно будет разрешено (после 100 м / с)) и зарегистрировать его на консоли.
async
функции будуттакже всегда возвращайте Promise
.Таким образом, вы можете использовать метод .then
при вызове функции для запуска «обратного вызова» после завершения функции getUsername
:
async function getUsername() {
var username = await new Promise(resolve => setTimeout(function() {
resolve("username");
}, 100));
console.log(username);
}
getUsername().then(res => {
console.log("password")
}).catch(er => {
console.error(er);
});
Хотя приведенный выше код работает, я предпочитаю регистрировать свое содержимое в результирующем обратном вызове .then
:
const getUsername = async _ => await new Promise(resolve => setTimeout(_ => resolve("username"), 100));
getUsername().then(result => {
console.log(result);
console.log("password");
}).catch(er => {
console.error(er);
});
Или, если вы предпочитаете не использовать обратный вызов .then
и использовать вместо него функцию async
, вы можете использовать:
const getUsername = async _ => await new Promise(resolve => setTimeout(_ => resolve("username"), 100));
const getUsernameAndPassword = async _ => {
const username = await getUsername();
console.log(username);
console.log("password");
}
getUsernameAndPassword();