gpt4 book ai didi

javascript - 在 promise 的 then() 内中断 for 循环

转载 作者:行者123 更新时间:2023-12-01 15:51:05 25 4
gpt4 key购买 nike

我遇到了一个奇怪的情况,我想在收到 Rx Promise 的结果并进行一些检查后中断 for 循环。我所拥有的是以下内容:

function getDrift(groups) {
var drift = {};
groups.forEach(function(group) {
if(group.type === 'something') {
for(var i = 0; i < group.entries.length; i++) {
fetchEntry(group.entries[i].id)
.then(function(entry) {
if(entry.type === 'someType'){
drift[entry._id] = getCoordinates(entry);
// break;
}
});
}
}
});
return drift;
}

哪里 fetchEntry正在返回基于 id 的 mongodb 文档的 Promise。如果 if检查满意,我想打破当前 group.entries的循环然后继续下一组。

那可能吗?

谢谢

编辑 :根据要求,组对象如下所示:
[
{
type: 'writing',
entries: [{id: "someId", name: "someName"}, {id: "someId2", name: "someName2"}]
},
{
type: 'reading',
entries: [{id: "someId3", name: "someName3"}, {id: "someId4", name: "someName4"}]
}
]

解决方案 :我最终使用 @MikeC 的建议与递归和回调来返回所需的值。谢谢你们!

最佳答案

这是不可能的,因为 Promises 是异步的,这意味着 then won't execute until all other synchronous code completes.

如果您不想根据某些条件处理所有这些,我建议您创建一个函数,如果您想继续调用该函数。

(function process(index) {
if (index >= group.entries.length) {
return;
}
fetchEntry(group.entries[index])
.then(function(entry) {
if(entry.type === 'someType'){
drift[entry._id] = getCoordinates(entry);
// don't call the function again
} else {
process(index + 1);
}
});
})(0);

关于javascript - 在 promise 的 then() 内中断 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35066774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com