问答

dva异步问题

作者:admin 2021-09-30 我要评论

背景 有一个接口获取到用户列表,列表内有用户信息和id,但没有用户名,现有另一个接口根据用户id得到用户名,插入用户列表。 相关代码 // 请把代码文本粘贴到下...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

背景

有一个接口获取到用户列表,列表内有用户信息和id,但没有用户名,现有另一个接口根据用户id得到用户名,插入用户列表。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

  effects: {
     *fetch({ payload }, { call, put }) {
      const response = yield call(queryFakeList, payload);
      //存在异步问题 暂时无好的解决方法
      //fetchUserName是一个根据用户id获得用户名的方法,第二个参数是回调函数
      response.data.forEach(item => {
        fetchUserName(item.owner, data => {
          item.ownername = data[0].text;
        });
      });
      yield put({
        type: 'queryList',
        payload: Array.isArray(response.data) ? response.data : [],
      })
    },
  },

这里在执行过程中,存在异步问题

有没有办法在forEach的过程中回调函数已同步的方式执行,然后再执行yield put。

###

你的表述看懂了,写法没看懂。
我的理解,循环请求,拿到列表中所有的name。

      let userNames = []
      const {data=[]} = yield call(queryFakeList, payload)
      // 使用for循环
      for (let i = 0; i < data.length; i++) {
        const res = yield call(fetchUserName, data[i].id);
        userNames.push({id:res.id,name:res.name})
      }

注意:这样做不好,会发很多请求。
建议:和后端商议,让他们调整。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • dva异步问题

    dva异步问题

  • requests爬取知乎携带cookies仍然被反

    requests爬取知乎携带cookies仍然被反

  • PyCharm 下载 PyQt5 报错?

    PyCharm 下载 PyQt5 报错?

  • 疫情期间如何使用frp达到内网穿透的作

    疫情期间如何使用frp达到内网穿透的作

腾讯云代理商
海外云服务器