我想要运行forEach循环然后返回(解决?)一个Promise,以便我的下一个函数可以运行。当forEach结束但我不知道如何解决Promise时,我可以正确地解决问题。
这是我的代码:
addSubmissionsForms(submissionId: string, submittedFields:Array<any>): Promise<any> {
const submissionPath:firebase.database.Reference = this.rootRef.child(`submissionsByID/${submissionId}/fields`);
submittedFields.forEach(function(submittedField, i) {
let fieldId = submittedField.id;
submissionPath.child(fieldId).update(submittedField);
if(i == submittedFields.length - 1) {
console.log('finished');
}
});
}
我想要返回Promise的原因是因为我想等到这个函数运行然后再运行这样的函数:
this.submissionsProvider.addSubmissionsForms(submissionKey, this.submittedFields)
.then(() => {
this.navCtrl.pop();
});
答案 0 :(得分:2)
因此,如果您想使用promises,您可以执行以下操作:
作为旁注,您可以取消任何值,例如resolve('finished')
addSubmissionsForms(submissionId: string, submittedFields:Array<any>): Promise<any> {
return new Promise((resolve, reject) => {
const submissionPath:firebase.database.Reference = this.rootRef.child(`submissionsByID/${submissionId}/fields`);
submittedFields.forEach(function(submittedField, i) {
let fieldId = submittedField.id;
submissionPath.child(fieldId).update(submittedField);
if (i == submittedFields.length - 1) {
resolve();
}
});
reject();
});
}
如果函数addSubmissionsForms
没有执行异步(例如ajax调用或读写数据库),那么你真的不需要promises,因为你可以一个接一个地执行函数
addSubmissionsForms();
nextFunction();