蓝鸟:获取每个()的结果
Bluebird: getting the results of each()
关于 .each()
,我有一些不明白的地方。函数 returns 产生原始数组而不是回调结果数组的承诺。那你怎么得到结果呢? .map()
不是我要找的,因为元素需要按顺序处理。
var input = [1, 2, 3];
return promise.each(input, causeSideEffect).then(function() {
/* return true if any side effect occurred */
});
在示例中,causeSideEffect()
returns 一个布尔值的承诺,表明它是否做了任何事情。
编辑:产生 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);
}
}
});
我们同意你的看法。事实上,我们非常同意您的看法,以至于这种行为在 3.0 中发生了变化(其中 3.0 将 return 修改后的数组)。
基本上,.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
并将结果累加到数组中(文档中的示例)。
关于 .each()
,我有一些不明白的地方。函数 returns 产生原始数组而不是回调结果数组的承诺。那你怎么得到结果呢? .map()
不是我要找的,因为元素需要按顺序处理。
var input = [1, 2, 3];
return promise.each(input, causeSideEffect).then(function() {
/* return true if any side effect occurred */
});
在示例中,causeSideEffect()
returns 一个布尔值的承诺,表明它是否做了任何事情。
编辑:产生 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);
}
}
});
我们同意你的看法。事实上,我们非常同意您的看法,以至于这种行为在 3.0 中发生了变化(其中 3.0 将 return 修改后的数组)。
基本上,.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
并将结果累加到数组中(文档中的示例)。