@Igorek98

Await не работает с обычными функциями?

Помогите разобраться.
Через await нельзя просто обратиться к вызову функции?
Только через функция, которая будет создана через промис?
В статье было написано, что await это заменитель промиса и я решил попробовать его использовать с обычной функцией.
function say() {
	console.log('say hello');
	return 'say';
}
async function start() {
	console.log('Start');
	await setTimeout(say, 3000);
	console.log('End');
}
start();
  • Вопрос задан
  • 94 просмотра
Решения вопроса 3
TNPTSYWWCC
@TNPTSYWWCC
And I Told Them I Invented Times New Roman
Ждать можно только те функции, что возвращают промис или объявлены как async (что в целом одно и тоже, ждать можно и обычные функции, только вопрос нужды). Чтобы ты мог ждать setTimeout, тебе нужно сделать обёртку для него через промисы.
Ответ написан
mmmaaak
@mmmaaak
То, что ты вызываешь с await, должно возвращать промис
Ответ написан
async-await - это синтаксический сахар над генераторами и промисами, как yield можно использовать только в генераторе, так и await можно использовать только в функциях, объявленных с async.

А сам await можно использовать с чем угодно, не только с функциями, которые возвращают промис, вот этот код тоже абсолютно корректен и работает как ожидается:

async function foo() { 
  console.log(await 1);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы