当generator内需要遍历网络请求的解决方案

87 阅读1分钟

使用场景:当把遍历(forEachmap等方式)异步网络请求后的结果赋值给同步的变量时,需要使用yield暂停。否则put后打印的结果是正确的,实际并没有正确赋值。原因:网络请求的await / call是异步任务。没有执行完就会执行后面的put

*getWelfareSkus(action, { call, put }) {
      const result = yield call(ActivityService.getWelfareSkus, action.payload) || {};
      yield result.dataList.map(async(item) => { // -->这里的yield
        item.activityData = await ActivityService.getWelfareData(item.skuPath) || {};
      });
      yield put({ type: 'setWelfareSkus';, payload: result });
    },