等待呼叫完成,然后在传奇中调度操作



我想调用服务器,然后将该数据用于调度其他操作。

export function* function1(actions) {
      console.log('inside');
      try {
        console.log('getting past orders list');
        const url = `/api/getOrders`;
        let reqsData = {
          order_id: actions.payload.order_id
        };
        const data = yield call(request, { url, method: 'POST', data:reqsData })
        console.log(data);
        console.log('///////////////////////////////////');
        if (!data.error) {
          console.log(data)
          yield put({ type: 'nowThis', payload: actions.payload.data });
        } else {
          console.log('---------------------------------')
          console.log('got some error');
        }
      } catch (error) {
        console.log(error)
      }
    }

但它没有在行
旁边运行代码 const data = yield call(request, { url, method: 'POST', data:reqsData }(
我之前有类似的代码正常运行+我检查了网络,并且此行的响应为200。
我用 fork 代替了调用,但它在调用完成之前在该行旁边运行我的代码。

yield调用需要函数和参数。编写一个方法进行服务调用。您可以使用 Axios npm 包 (axios.get('../url',params:{params}(( 并在 yield 调用中调用该函数。

yield call(methodToCallApi((,params,to,method(。 此外,最好将服务调用保存在单独的文件中,并在 Saga 中调用这些方法,而不是直接在 Saga 中定义。

您的request方法似乎未正确返回。将其包装在Promise中:

request() {
  return new Promise(resolve => {
    myApiCall().then(response => {
      resolve(response);
    }).catch(e => {
      reject(e);
    });
  });
}

然后在您的传奇中,您可以正常yield

const data = yield call(request, { url, method: 'POST', data:reqsData })

最新更新