我有这个承诺,Item
如果在数据库中找不到该新文件,则会创建一个新文件,然后将其存储在以前创建的Collection
文件中。
集合文档是数组中的第一个字符串,并且数组中的任何后续索引都会转换为一个或多个Item文档。
Promise.each
“解析为原始数组未修饰的”等等,最后return
内的Promise.each
被渲染的对象,但在随后.then
产生原始阵列..
这是承诺(为便于阅读而缩写):
globalVar = true;
collectionId = "";
var itemSeries = Promise.each(items, function(element) {
if (globalVar == true) {
return Models.Collection.findOneAsync({
"name": element
})
.then(function(collection) {
// promise chain similar to the following else..
// set the collectionId var to an _id
});
} else {
return Models.Items.findOneAsync({
"name": element
})
.then(function(item) {
if (item == null) {
return Models.Labels.findOneAsync({
"title": element
})
.then(function(label) {
var newItem = new Models.Items({
name: element,
label: label._id
});
return newItem.saveAsync();
}).then(function() {
return Models.Items.findOneAsync({
"name": element
});
}).then(function(item) {
item.collection = collectionId;
return item.saveAsync();
}).then(function() {
return Models.Items.findOneAsync({
"name": element
});
}).then(function(item) {
allItems.push(item);
console.log("allItems: [ ");
console.log(allItems);
return allItems;
});
}
});
}
}).then(function(allItems) {
console.log("allItems: [ ");
console.log(allItems);
return allItems;
});
这console.log
是Promise.each中的最后一个:
allItems: [
[ { _id: 54eec5f2b9fb280000286d52,
name: 'one',
label: 54eec5f2b9fb280000286d51,
collection: 54eec5f2b9fb280000286d50,
__v: 0 },
{ _id: 54eec5f2b9fb280000286d54,
name: 'two',
label: 54eec5f2b9fb280000286d53,
collection: 54eec5f2b9fb280000286d50,
__v: 0 } ]
然后在后面.then(function(allItems) {
的是最后一个console.log
:
allItems: [
[ 'collectionName', 'one', 'two' ]
另外,可变itemSeries
的是= Promise.each
后呈现undefined
在Promise.join?
该.each
函数不会更改通过链 传递 的值:
我简化了您的代码,作为输入,我假设:
var items = ['one','two'];
对于您的代码:
Promise.each(items, function(element) {
return element+'.';
//return Promise.resolve(element+'.');
})
.then(function(allItems) {
console.dir(allItems);
});
结果仍然是['one','two']
因为这是数组的解析值items
。每个内的返回值不会影响传递给链式的值的内容then
。
.map
另一方面,该功能将具有以下效果:
Promise.map(items, function(element) {
return element+'.';
//return Promise.resolve(element+'.');
})
.then(function(allItems) {
console.dir(allItems);
});
在这里,return
值value将用于创建新数组,然后将其传递给then
。结果是['one.','two.']
。
allItems
您的代码中出现的两个是不同的对象。
编辑 对于映射的串行迭代,我将编写一个如下的辅助函数:
function mapSeries(things, fn) {
var results = [];
return Promise.each(things, function(value, index, length) {
var ret = fn(value, index, length);
results.push(ret);
return ret;
}).thenReturn(results).all();
}
资料来源:实施Promise.series
我有一个json blob,如下所示: 这只是一个在这里发布的例子。在这个例子中,我们看到它提供了一个学校每年发生的所有事件的列表,该列表是一个累积列表,即上一年的事件也会被追加。我们知道的是,每年的活动都将以“会议开始”活动开始。我想通过这件事,以最新的一系列事件结束。请忽略事件名称中的时间戳或年份,它们只是示例,我在现实世界中没有此类信息。我需要的最终结果是: 所以,我想保留从“会话开始”事件
我对java相当陌生,实际上我正在编写一个键盘记录器,并让它定期写入文件。每当用户按下某个键时,它都会实例化一个NativeKeyEvent,该事件调用“param string()”并将信息作为字符串添加到下面的arraylist中... 然后,在每一个间隔,字符串数组被传递,并被写入下面的TimerTask线程中的文件。 行'str=iterator.next().tostring();‘然后
当我使用temp=iterator.next()时,sort方法会导致并发修改错误。你能帮我解决并发修改错误吗。我给出了整个类的代码,但我只是尝试完成sort方法。事先谢谢你的帮助。 我必须对ArrayList中的所有数组进行排序。
我正在从数据库resultset获取一个巨大的ArrayList,并尝试在Java中迭代它(尝试从中获取值)。在对其进行迭代时,我在一个特定的行上得到一个concurrentModificationException我尝试使用各种解决方案,但却一次又一次地得到相同的错误,我在下面发布代码 我在myDTo.getsom_num().ToString()这一行上遇到异常。有谁能帮我解决这个问题吗
比如说,我做了如下事情: 其中通过几层代码间接地为
问题内容: 我知道您不应在遍历列表时添加/删除项目。但是,如果不更改列表长度,是否可以修改要迭代的列表中的项目? 还是应该迭代列表索引?像那样: 问题是:以上两种方式都是允许的,还是只有第二种是没有错误的? 如果答案是肯定的,以下代码段是否有效? UPD。我想在python文档中看到“允许这些操作”而不是某人的假设。 问题答案: 可以这么说,您 不是在 修改列表。您只是在修改列表中的元素。我不认为