Выполнить функцию после завершения двух обещаний - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужно, чтобы функция "finalizeProcess" была выполнена после завершения всех обещаний функции "processPhotos".

Кто-нибудь может мне помочь?Спасибо !!

processPhotos();
finalizeProcess();

processPhotos (){
    this.foto1File.generateBlob((blob) => {
        ref.child('picture_1').put(blob)
          .then((pictureRef) => {
            //sentence
          }) 
     })

    this.foto2File.generateBlob((blob) => {
        ref.child('picture_2').put(blob)
          .then((pictureRef) => {
            //sentence
          }) 
     })
}

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Что касается того, что сказал Trincot, вы можете использовать Promise.all

Сохранить свои функции в переменной и затем разрешить обещания вместе.

 processPhoto(){

  const firstPromise = this.fotoFile.generateBlob(blob => {
    //[..]

  }
  const secondPromise = this.foto2File.generateBlob(blob => {
     //[...]
   }

 const [foto1File, foto2File] = Promise.all([firstPromise, secondPromise]);
}

Конечно, в каждой функции,убедитесь, что возвращаете само обещание.

0 голосов
/ 27 февраля 2019

Здесь другая альтернатива, похожая на ответ Давмича .Но вместо вызова finalizeProcess внутри processPhotos возвращается обещание, которое вы можете использовать для вызова finalizeProcess.

function processPhotos() {
  return Promise.all([
    new Promise(resolve => {
      this.foto1File.generateBlob(blob => {
        ref.child('picture_1').put(blob).then(resolve);
      });
    }),
    new Promise(resolve => {
      this.foto2File.generateBlob(blob => {
        ref.child('picture_2').put(blob).then(resolve);
      });
    })
  ]);
}

processPhotos().then(pictureRefs => finalizeProcess());

В качестве альтернативы вы можетеразверните сначала выполнить некоторую обработку.

ref.child('picture_1').put(blob).then(resolve);

Становится:

ref.child('picture_1').put(blob).then(pictureRef => {
  // do stuff with pictureRef
  resolve(/* custom value */);
});
0 голосов
/ 27 февраля 2019

Это поможет:

function processPhotos() {
  var promise1 = new Promise(resolve => {
    this.foto1File.generateBlob(blob => {
      ref.child('picture_1').put(blob)
        .then(pictureRef => {
          resolve(pictureRef);
        });
    });
  });

  var promise2 = new Promise(resolve => {
    this.foto2File.generateBlob(blob => {
      ref.child('picture_2').put(blob)
        .then(pictureRef => {
          resolve(pictureRef);
        });
    });
  });

  Promise.all([promise1, promise2]).then(results => {
    // do something with results here
    finalizeProcess();
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...