“ 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
})
})
}
答案 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 */);
});