Асинхронный код внутри каждого цикла - PullRequest
2 голосов
/ 01 октября 2019

Это мой первый пост, потому что я обычно нахожу способ ответить на мои вопросы с помощью старых сообщений ... Но на этот раз я застрял. Я надеюсь, что вы можете мне помочь.

searchUser.forEach(function(item, i) {
        getUser(item)
        .then(objUser => {
            console.log(i);
            console.log(objUser);
            name = objUser.name;
            let idConversation = objUser.id;
            createNewConversation(name, idConversation)
        })
    })

My getUser - это асинхронная функция, и я не знаю почему, но, похоже, моя конструкция не работает. это только создает количество разговоров, которые у меня есть, но с содержанием последнего разговора, а не с другими ... есть идеи о том, что мне там не хватает? Кстати, console.log(i) дает 1, а затем 0.

К вашему сведению getUser - это функция , которая возвращает данные от пользователя.

1 Ответ

3 голосов
/ 01 октября 2019

Наличие асинхронной функции внутри цикла forEach может быть сложно отладить, я бы предложил использовать Promise.all для вызова createNewConversation после того, как все обещания разрешены:

const promises = searchUser.map(item => getUser(item));

Promise.all(promises).then(result => {
  result.forEach(({ name, id }) => {
    createNewConversation(name, id);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...