【发布时间】:2016-01-28 16:28:35
【问题描述】:
我遇到了一种奇怪的情况,我想在收到 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 的建议,使用递归和回调来返回所需的值。谢谢大家!
【问题讨论】:
-
您在这里遇到的问题是请求(可能)是异步的,而循环是同步的。因此,前者不能破坏后者,因为当回调触发时,循环早已结束。
标签: javascript promise rxjs