Как остановить цикл Promise.all, когда он отклоняет - PullRequest
0 голосов
/ 22 ноября 2018

Я с трудом пытаюсь остановить цикл в обещании. Все, если одно обещание отклоняет его.Вот как я это сделал.Что-то не так с этим?

 Promise.all(myArray.map((obj) => {
      this.someFunction(obj);
 }))

Вот функция, которую я вызываю ..

someFunction(){
 return new Promise(function (resolve, reject) {
    ....
     reject()
 })}

Ответы [ 2 ]

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

Попробуйте это:

const arrayOfFunctions = myArray.map(obj => this.someFunction(obj))
Promise.all(arrayOfFunctions).then(values => {
 console.log(values);
}).catch(error => {
  console.log(error)
});
0 голосов
/ 22 ноября 2018

Я обновил свой код, он протестирован и работает на моей машине с фиктивными данными, которыми я его передаю.Я не совсем уверен, как структурирована остальная часть вашего кода, но это выглядит примерно так: О, и вы не можете выйти из карты, но мы будем использовать простой цикл for, потому что мы можем выйти из этого:

function someFunction(){
 return new Promise(function (resolve, reject) {
      // I will be rejeccting a boolean
      // If you are resolving something, resolve it as true
     reject(false)
 })}


async function shouldStopLoop(){

  // the boolean will come here
  // if it is false, the catch block will return
  // if it is true, the try block will return

  let stopLoop = null;
  let result = null;

  try {
     result = await someFunction();
     return result
  } catch(error) {
    stopLoop = error;
    return stopLoop;
  }
}

function mayReturnPromiseAll() {

  let myArray = ['stuf to loop over...']
  let arraytoGoInPrimiseAll = [];


  // Array.prototype.map cannot be stopped
  // Thats why we will use a for loop and we will push the data we need
  // into another array 
  for (var i = 0; i < myArray.length; i++) {
    if (!this.someFunction(obj)) {
        break;
    } else {
      // push things in arraytoGoInPrimiseAll
    }
  }

  if(arraytoGoInPrimiseAll.length > 0){
    return Promise.all(arraytoGoInPrimiseAll)
  } else {
    // do something else
  }

};
...