vue 循环请求接口

问题描述:
通过请求接口queryDemandExpress,返回数组idList:['233','66','676','33'];
接口2:syncExpressNo,传参为demandId,
要求是:循环数组idList中的数组将每一项作为接口syncExpressNo的参数,循环发送请求
大致意思为:

idList.forEach(item => {
    syncExpressNo({demandId:item})
})
阅读 10.9k
5 个回答

详细描述下你的问题吧

let queue=idList.forEach(item => {
    return new Promise(resolve=>{
        syncExpressNo({demandId:item}).then(res=>{
            resolve(res)
        )
    })
})
Promise.all(queue).then(result=>{
   //TODO
    ...
})

已解决,仅供参考
目前存在问题:promise.all一个调用失败的话会全部失败、、,待修正

queryExpress(context, data) {
    return syncExpressNo({ demandIdList: data });
  },
  async batch_expressNo({ state, commit, dispatch }) {
    commit('SET_PERCENT', 0);
    const params = {
      dtStart: state.searchFormData.dtStart,
      dtEnd: state.searchFormData.dtEnd,
      expressNameEmpty: true,
      expressNoEmpty: true,
      shopCodeList: [
        'TMALL',
      ],
    };
    try {
      const { data } = await queryDemandExpress(params);
      const list = data.map(({ demandId }) => demandId);
      let failCount = 0;
      let idx = 0;
      const incFailCount = () => (failCount++);
      await Promise.all(list.map(id => (async () => {
        const { code } = await dispatch('queryExpress', [id]).catch(incFailCount);
        if (code !== 0) {
          incFailCount();
        }
        idx += 1;
        const num = (100 / list.length) * (idx);
        commit('SET_PERCENT', parseInt(num, 10));
      })()));
      Message.error(`总数量为:${list.length},获取失败数量为:${failCount}`);
    } finally {
      commit('SET_PERCENT', 100);
      dispatch('getList');
    }
  },
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题