@historydev
Острая аллергия на анимешников

Почему массив всегда пуст?

Пытаюсь передать данные выше из промиса:

const result = response.map(meeting => {
			const members: any[] = [];

			meeting['members'].forEach((user_id: string, i: number) => {
				query('users').then(data => {
					const user = data.collection.findOne({id: user_id});
					members.push(user);
				}).catch(console.error);
			});

			return {
				...meeting,
				members
			}
		});


Почему массив members пустой по итогу?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что асинхронность работает не так, как вы хотите. Колбэк в then вызывается уже после return.
Статей (и вопросов здесь) на тему «асинхронность в JavaScript» огромное количество — выбирайте какая понравится и изучайте.
Ответ написан
MvcBox
@MvcBox
Software Developer [C/C++/JS(for Node.js)/etc]
Потому, что Вы пытаетесь из синхронного кода вернуть результат работы асинхронного.
Ответ написан
@dcooder
в вашем случае вероятно подойдет трюк с async - await. То есть ваша функция должна быть асинхронной, например:
async getUsers() {
     const users = await query('users');
     const members = meeting['members'].map((user_id) => users.collection.findOne({id: user_id}));
     return [...meetings, members]
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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