我有此代码:
var arrMultiplication = function(arr1, arr2) {
return new Promise(function(resolve, reject) {
if ( arr1.length ==arr2.length ) {
temp =new Array();
for(var i=0;i<arr1.length;i++){
temp.push(arr1[i]*arr2[i]);
}
resolve(temp);
} else {
reject(Error("Promise Rejected"));
}
});
}
//[1,2,5], [1,2,0],[2,2,2].[1,2,3]
var A=[1,2,5];
var B=[1,2,0];
var C=[2,2,2];
var D=[1,2,3];
arrMultiplication(A,B).then(function(result){
arrMultiplication(C,result).then(function(result){
arrMultiplication(D,result).then(function(result){
alert(result);
});
});
});
我如何简化操作而不是多次调用promise
如果我将A B C D E F
作为数组,它将以这种方式复杂化。
如何使它变得更容易。
答案 0 :(得分:1)
尽管我同意@szab的评论,即您在此处不需要Promises,但总的来说,您可以使用reduce来链接n长度的诺言。
示例:
var arrMultiplication = function(arr1, arr2) {
return new Promise(function(resolve, reject) {
if ( arr1.length ==arr2.length ) {
temp =new Array();
for(var i=0;i<arr1.length;i++){
temp.push(arr1[i]*arr2[i]);
}
resolve(temp);
} else {
reject(Error("Promise Rejected"));
}
});
}
//[1,2,5], [1,2,0],[2,2,2].[1,2,3]
var A=[1,2,5];
var B=[1,2,0];
var C=[2,2,2];
var D=[1,2,3];
var allArrays = [A, B, C, D];
const multiplicationsPromise = allArrays.reduce((resultPromise, currentArray) => {
return resultPromise.then(result => arrMultiplication(result, currentArray))
}, Promise.resolve([1,1,1]))
multiplicationsPromise.then(result => alert(result));
工作小提琴here