Функция Util для объединения нескольких функций обещаний вместе с функциями без обещаний в конце - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть удобное решение для простых функций обещания.Но мне нужен способ связать набор функций обещаний, и последнее «тогда» вызовет три другие функции без обещаний.

Ниже приведено то, что я пробовал

function chainMyPromises(promiseFunction, promiseArray){
    if(!promiseArray.length){
       return;
    }

  promiseFunction.then(()=>{
    const currentFunc = promiseArray.shift()
    return chainMyPromises(currentFunc(), promiseArray);
   });
}

const promiseArray = [functionOne, functionTwo, functionThree, functionFour];

function firstPromise(){
  return Promise.resolve(true);
}

chainMypromises(firstpromise, promiseArray);

Ниже приведена моя функция, которая имеет некоторые функции, основанные на обещаниях, последний «then» проверяет ответ и вызывает три функции, не основанные на обещаниях.

function consolidatedReport(param1, param2){

   const somedata = param1.data;
   const someOtherData = param2.data;

  if(true){ 
     doThisthing(); 
   }

  return promiseChainBegin(somedata, someOtherData)
    .then(response => response && functionOne(somedata, someOtherData)
    .then(response => response && functionTwo(somedata, someOtherData)
    .then(response => response && functionThree(somedata, someOtherData)
    .then(response => response && functionFour(somedata, someOtherData)
    .then(response => {
       if(response) {
           notApromiseFuncOne(somedata)(someOtherData);
           notApromiseFuncTwo(somedata)(someOtherData);
           notApromiseFuncThree(somedata)(someOtherData);
        } else{
           notApromiseFailCase(someOtherData);
        }
    });
}

Last 'then'вызывает три функции, которые не основаны на обещаниях.Мне нужен способ связать их и привести в порядок.Пожалуйста, предложите лучший способ их рефакторинга.

1 Ответ

0 голосов
/ 30 апреля 2019

Почему бы не использовать что-то вроде Promise.all(), например, так:

    var promise1 = Promise.resolve(3);
    var promise2 = 42;
    var promise3 = new Promise(function(resolve, reject) {
      setTimeout(resolve, 100, 'foo');
    });

    Promise.all([promise1, promise2, promise3]).then(function(values) {
      console.log(values);
    }).catch(function(err){
      //If there is an execption it would be handled here
    });
    // expected output: Array [3, 42, "foo"]

Это гораздо более понятный способ обработки нескольких обещаний, затем вы можете выполнить все свои функции, не основанные на обещаниях, за последние .then()

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