for循环中调用接口 async await Promise


前言

for循环中 循环调用接口 然后等循环结束获取全部数据。


1.for循环

代码如下(示例):

async initMapInfoWindowChart(data) {
      const { data: res, code: code } = await getData({
        id: data.id,
      })
      if (code == 200) {
        if (res) {
          var chartList = []
          chartList = res
          for (let i in chartList) {
          //此处的resData  即为每次循环执行后 异步接口返回值
            let resData = await this.getHistoryList(i, chartList[i].id)
          }
          this.chartList = chartList
        }
      } else {
        this.$notify({
          type: 'error',
          title: '失败!',
          message: res.msg,
          position: 'bottom-right'
        })
      }
    },

2.异步接口

代码如下(示例):

async getHistoryList(i, id) {
      return new Promise(async resolve => {
        pageHistoryList({
          id: id
        }).then(res => {
          if (res.code == 200) {
            if (res.data) {
              var historyList = res.data
              resolve(historyList)
            }
          } else {
            this.$notify({
              type: 'error',
              title: '失败!',
              message: res.msg,
              position: 'bottom-right'
            })
          }
        })
      })
    },

总结

使用async await Promise化异步为同步 便于拼接数据

<think> 我们正在讨论JavaScript中的异步编程:async/awaitPromise链式调用在if-else语句中的使用方法。 用户要求尽可能参考上一次的问题和回答,但这是本次对话的初始问题。因此,我们将直接回答问题。 关键点: 1. async/await:基于Promise的语法糖,使异步代码看起来像同步代码。 2. Promise链式调用:通过then和catch方法链式处理异步操作。 3. 在if-else语句中,我们可以根据条件选择不同的异步执行路径。 我们将分别展示在if-else语句中使用async/awaitPromise链式调用的方法。 注意:由于是JavaScript,我们使用中文解释,代码部分使用JavaScript语法。 首先,我们展示Promise链式调用在if-else中的使用: - 在then方法中,我们可以根据条件返回新的Promise,从而形成分支。 然后,展示async/await在if-else中的使用: - 使用async函数包裹,然后在if-else语句中直接使用await等待异步操作。 最后,我们可能会提到两者混合使用的情况。 由于问题要求生成相关问题,我们将在最后生成几个相关问题。 </think> ### async/awaitPromise 链式调用在 if-else 语句中的使用方法 在 JavaScript 异步编程中,`async/await` 和 `Promise` 链式调用可与 `if-else` 逻辑结合使用。以下是具体实现方法: #### 一、Promise 链式调用结合 if-else ```javascript function fetchData(condition) { return new Promise((resolve) => { // 模拟异步操作 setTimeout(() => resolve(condition), 100); }); } fetchData(true) .then(result => { if (result) { // 分支1:返回新Promise链 return fetchData("分支1").then(data => `结果: ${data}`); } else { // 分支2:直接返回值 return "分支2结果"; } }) .then(finalResult => { console.log(finalResult); // 输出: "结果: 分支1" }) .catch(error => console.error(error)); ``` **关键点**: 1. 在 `then()` 中使用 `if-else` 返回不同值或新 Promise 2. 每个分支需返回相同类型(值或Promise对象) 3. 错误统一用 `catch()` 处理[^1] #### 二、async/await 结合 if-else(推荐) ```javascript async function handleCondition(condition) { try { const result = await fetchData(condition); if (result > 10) { const data1 = await fetchData("分支A"); return `分支A结果: ${data1}`; } else { const data2 = await fetchData("分支B"); return `分支B结果: ${data2}`; } } catch (error) { console.error("错误处理:", error); } } // 执行示例 handleCondition(5).then(console.log); // 输出: "分支B结果: 分支B" ``` **优势**: 1. 代码结构更接近同步逻辑,层次清晰 2. 可直接在条件块内使用 `await` 3. 错误处理通过 `try-catch` 统一管理 4. 支持 `return` 直接返回异步结果[^2] #### 三、混合使用场景 ```javascript async function hybridExample() { const user = await fetchUser(); // Promise链与await混用 if (user.isVIP) { return fetchVIPData() .then(data => data.filter(item => item.active)) .then(filtered => sendNotification(filtered)); } else { await logAccess(user.id); return "普通用户流程结束"; } } ``` 注意事项: 1. `async` 函数始终返回 Promise 对象 2. `if-else` 各分支返回值类型应一致 3. 避免在循环/条件中直接创建新 Promise(易产生冗余) 4. 优先使用 `async/await` 提升可读性,复杂链式操作可保留 Promise
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值