当foreach循环结束时返回一个promise

时间:2017-11-09 12:35:27

标签: javascript typescript foreach firebase-realtime-database

我想要运行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();
  });

1 个答案:

答案 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();