function one_by_one(objects_array, iterator, callback) {
var start_promise = objects_array.reduce(function (prom, object) {
return prom.then(function () {
return iterator(object);
});
}, Promise.resolve()); // initial
if(callback){
start_promise.then(callback);
}else{
return start_promise;
}
}
one_by_one(requestBodyAll,task);
我尝试了上面的代码,但它只处理了第一个文件。有人可以帮忙吗?
requestBodyAll
- 包含要处理的文件列表。
task - function返回promise。答案 0 :(得分:0)
看起来正确。如果减少没有超过第一个文件,那么task(first_file)
可能会抛出。您可以通过记录错误找到答案。
此外,您最好从one_by_one
返回承诺,而不是通过回调。
function one_by_one(objects_array, work) {
return objects_array.reduce(function (prom, object) {
return prom.then(function() {
return work(object);
});
}, Promise.resolve()); // initial
}
one_by_one(requestBodyAll, someWorkFn)
.then(task)
.catch(function(error) {
console.log(error);
});
one_by_one()
将(如问题中)将iterator(last_file)
的结果作为参数传递给task
。你可能更喜欢不传递任何东西,在这种情况下写:
.then(function() {
return task();
})
您可以通过捕获one_by_one()
内部来免受错误处理。