Создавайте Recursive In Promise вместо многократного вызова - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть этот код:

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);
    });
  });
});

JSfiddle

Как мне сделать это проще, чем многократно вызывать обещание? Если у меня есть A B C D E F в качестве массивов, это будет сложно с этим способом. как сделать это проще.

1 Ответ

0 голосов
/ 15 ноября 2018

Хотя я согласен с комментарием @szab о том, что здесь вам не нужны Обещания, в общих чертах вы можете использовать сокращения до 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));

Рабочая скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...