for循环中同步调用接口

Elementui中的级联选择器应用,每级都是动态加载数据,级数不确定,多的有10级

遇到的问题:回显时输入框没有选中内容

首先我猜测就是for循环中使用每个id请求数据后,响应时间不等,导致回显的级联数据有问题,最终证明猜想正确

解决方法

使用Promise+async+await

async initdata(){
    for(let i = 0;i<data.length;i++){
        const real = await this.hanleData()
        
    }
},
hanleData(){
    return new Promise((resolve,reject) => {
        //请求接口
        this.$http.post(参数).then(res => {
            //可以增加一下数据处理
            resolve()
        }).catch(err => {
            reject()
        })
    })
}

以上是代码实例,需要注意的是:for循环中调用方法时使用await,外面必须套一层async的方法,如果initdata()方法中有api请求,那么请把for循环单独提出去,写个方法即可;

当时我就是懒了一下,没有单独写,导致一直不成功,同步没有生效

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在小程序的`onShow`生命周期函数,如果你想同步循环调用接口,你可以使用`async/await`结合`for...of`循环来实现。以下是一个示例的小程序JS文件代码: ```javascript // 假设数组名为items,接口函数名为callAPI // 定义一个函数,用于调用接口 function callAPI(item) { return new Promise((resolve, reject) => { // 调用接口的逻辑 // ... // 这里可以使用wx.request或其他方法调用接口,处理返回结果等 // 假设接口返回的是Promise对象,你可以直接返回该Promise对象,或者根据接口返回的具体数据进行适当的处理后再返回 resolve(/* 接口返回的数据 */); }); } // 定义小程序页面的Page对象 Page({ onShow() { // 循环遍历数组并同步调用接口 async function loopArrayAndCallAPI(items) { for (let item of items) { await callAPI(item); } console.log('所有接口调用完成'); } // 调用函数,传入数组进行循环调用接口 const items = [ /* your array here */ ]; loopArrayAndCallAPI(items) .catch((error) => { console.error('接口调用出错:', error); }); }, }); ``` 上述代码在小程序页面的`onShow`生命周期函数定义了一个异步函数`loopArrayAndCallAPI`,在该函数内部使用`for...of`循环遍历数组并通过`await`关键字等待每个接口调用完成。这样可以保证每次循环接口调用完成后再进行下一次循环。在循环结束后,会打印出"所有接口调用完成"的消息。 你可以根据实际需求在`callAPI`函数编写接口调用的逻辑,并根据需要处理接口返回的数据。在调用`loopArrayAndCallAPI`函数时,你可以通过`.catch()`方法来处理接口调用出错的情况。请注意,这只是一个示例代码,你需要根据自己的实际需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值