首页 > 解决方案 > 在循环内触发同步调用 等待两个 api 调用成功然后下一次迭代需要以角度 6 开始

问题描述

尝试使用以下代码在响应到来之前不要等待调用后成功跳转到下一次迭代。要求:需要在两次api(POST/PATCH)调用成功后进行下一次迭代

 for (item of data) {
  A(item)

}
A(value) {
  const resp = this.post(url, {
      'rationale': value['rationale']
    })
    .mergeMap(tempObj => {
      value['detail'] = tempObj['id']
      return this.patch(url, value['extid'], value)
    })
    .subscribe()
}

标签: javascriptangularecmascript-6rxjsangular6

解决方案


最近我使用了toPromiseangular http 的函数来将 observable 变成 promise。如果您在异步函数中有外部循环,这可能会起作用:

// This must be executed inside an async function
for (item of data) {
  await A(item)
}

async A(value) {
  const resp = await this.post(url, {
      'rationale': value['rationale']
    })
    .mergeMap(tempObj => {
      value['detail'] = tempObj['id']
      return this.patch(url, value['extid'], value)
    }).toPromise();
}

推荐阅读