我想调用服务器,然后将该数据用于调度其他操作。
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 })