javascript - 如何停止执行 foreach 直到它内部的 API 调用结束?
问题描述
我正在调用发送一组 id 作为参数的服务。在函数中,我需要对这些 id 做一个 foreach 并为每个 id 调用一个 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]});
}
})
});
}
谢谢!!
解决方案
这是一个如何使用 promise 和 map 的示例。
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
然后处理结果。
推荐阅读
- sql - SQL 更新表行,其中 是特定值
- c# - C# LINQ 对日期 DESC 进行排序的最有效方法,首先使用 NULL
- angular - 根据选定的下拉菜单显示垫表
- image-processing - 在图像分类中预测单个图像的类标签
- postgresql - Postgresql Aurora DB freeable_memory
- angular - 单击按钮选择所有行
- visual-studio-2019 - Unable to Sign in in Visual Studio 2019 – Completely Blank Sign In Page
- python - 带有子列表的 pyqt5 下拉列表
- java - ProcessBuilder is not able to find the file of a given command
- android-studio - Android Studio 3.5.3 debugging on Sony Xperia XA2 Ultra