@Dmitry221060

Как заставить асинхронную функцию ждать ответа от другой асинхронной функции?

Извиняюсь, если вопрос глупый, я только начал разбираться с async/await.
Есть функция, callback которой нужно выполнить асинхронно, но она множество раз вызывает другую асинхронную функцию -
... .then(async (data) => { //Нужно асинхронно выполнить этот callback
	try {
		let size = data.size;
		data.forEach((message) => {
			if (!message.pinned) {
				await message.delete().catch(writeErr); //message.delete - возвращает Promise
			}
		});
		Send(size + " сообщений удалено"); //Этот вызов должен сработать только после того, как все Promise от message.delete выполнятся
	} catch (err) {
		Send("Извините, произошла ошибка");
		return writeErr(err);
	}
})

Этот код кидает ошибку -
await message.delete().catch(writeErr);
      ^^^^^^^
SyntaxError: Unexpected identifier
    at createScript (vm.js:53:10)
    at Object.runInThisContext (vm.js:95:10)
    at Module._compile (module.js:543:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)

Как мне реализовать задуманное и что я делаю не так?
  • Вопрос задан
  • 797 просмотров
Решения вопроса 1
@dmitrygavrish
Ошибка из-за того, что функция, которую вы передаете в forEach, не асинхронная. Т.е. надо:
data.forEach(async (message) => {
      if (!message.pinned) {
          await message.delete().catch(writeErr); //message.delete - возвращает Promise
      }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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