一旦完成了两个承诺,就执行功能

时间:2019-02-27 19:40:22

标签: javascript promise

“ processPhotos”功能的所有承诺完成后,我需要执行“ finalizeProcess”功能。

有人可以帮助我吗? 谢谢!

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 :(得分:1)

这可以解决问题:

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

答案 1 :(得分:1)

关于Trincot所说的话,您可以使用Restart

将函数存储到变量中,然后一起解决承诺。

Promise.all

当然,在每个函数中,请确保要返回承诺本身。

答案 2 :(得分:0)

这是另一种替代方法,类似于answer of davmich。但是不会返回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 */);
});