我想打电话给服务器,然后使用该数据来调度其他操作。
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)
}
}
但是它不在行
旁边运行代码
常量数据=产生调用(请求,{网址,方法:“ POST”,数据:reqsData})
我有类似的代码,在此之前它可以正常运行+我检查了网络,并得到了此行的响应200。
我已经使用 fork 代替了通话,但是在通话完成之前,它会在该行旁边运行我的代码。
答案 0 :(得分:0)
yield调用采用函数和参数。编写一个方法来进行服务调用。您可以使用axios npm包(axios.get('../ url',params:{params}))并在yield调用中调用该函数。
收益电话(methodToCallApi(),params,to,method)。同样,最好将服务调用保存在单独的文件中,然后仅在saga中调用这些方法,而不是直接在saga中定义。
答案 1 :(得分:0)
似乎您的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 })