这是我对.each()
无法理解的事情。该函数返回一个promise,它产生原始数组而不是回调结果数组。你如何得到结果呢? .map()
不是我正在寻找的,因为元素需要按顺序处理。
var input = [1, 2, 3];
return promise.each(input, causeSideEffect).then(function() {
/* return true if any side effect occurred */
});
在示例中,causeSideEffect()
返回布尔值的promise,表示它是否执行了任何操作。
编辑:产生版本3.0行为的垫片
var promise = require('bluebird');
var testInput = [ 1 ];
promise.each(testInput, function(){}).then(function(results) {
if (results[0] === 1) {
var originalFunction = promise.each;
promise.each = function(array, callback) {
var results = [];
var closure = function(item, index, length) {
return promise.resolve(callback(item, index, length)).then(results.push.bind(results));
};
return originalFunction(array, closure).return(results);
}
}
});
答案 0 :(得分:3)
我们同意你的看法。事实上,我们非常同意你的观点,这种行为在3.0中会发生变化(其中3.0将返回修改后的数组)。
基本上,.each
预计不会以这种方式使用 - 预计人们只会将.each
用于副作用,而不会用于他们使用.map
的内容对
在那之前,你可以自己做积累:
var input = [1, 2, 3], result = [];
return promise.each(input, causeSideEffect).then(function() {
result.push(modificationHappened); // true or false
}).then(function(){
// access result
});
或者使用.reduce
并将结果累积到数组中(文档中的示例)。