Как остановить выполнение foreach до конца вызова API, который у него внутри? - PullRequest
0 голосов
/ 04 сентября 2018

Я звоню в службу, отправляя массив идентификаторов в качестве параметра. В функции мне нужно сделать foreach этих идентификаторов и сделать вызов API для каждого из них, чтобы получить полную информацию об этом элементе, а затем сделать что-то с этой информацией.

так как я могу остановить выполнение foreach до конца вызова API, который у него внутри?

Функция:

addCandidate(ids: any, candidate: string) {

    ids.forEach(elem => {

        this.getSearch(elem).subscribe(res => {

            let currentCandidates = res.candidates;
            if(currentCandidates) {
                if(!currentCandidates.includes(candidate)){
                    currentCandidates.push(candidate);
                    this.itemDoc.update({candidates: currentCandidates});
                }
            }else{
                this.itemDoc.update({candidates: [candidate]});
            }
        })

    });
}

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Звучит так, как будто вы хотите сопоставить массив с набором обещаний, а затем дождаться завершения всей этой параллельной работы, прежде чем делать что-то еще.

Я думаю, вы найдете очень полезными карту, обещание и асинхронность / ожидание, например,

const ids = [1, 2];

const work = await Promise.all(
  ids.map(ajaxCall)
);

// 'await' means that this won't be called until the Promise.all is finished
printToScreen(work);
0 голосов
/ 04 сентября 2018

Вот пример того, как использовать обещание и карту.

let doSomthingToWaitFor = (ms) => {
  return new Promise(resolve => setTimeout(() => resolve('r-' + ms), ms))
}

(async (ids) => {
    await Promise.all(ids.map(async id => {
        let res = await doSomthingToWaitFor(id);
        console.log("my res: %s from id: %s", res, id);
    }));

    console.log("Successfully waited");
})([1000, 2000, 3000, 4000]);

Вы можете реализовать свой запрос в функции, подобной doSomthingToWaitFor, и впоследствии обработать результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...