记一次提取接口轮询方法实现过程
开始时参照网上写法,将接口调用封装在了轮询方法中,但是发现在model中只能获取到一次接口数据,原因在于polling方法只调用一次。所以在外部只能取得一次接口返回的值。
然后尝试在model中进行接口调用,并将调用函数传入polling中,可以在model中实时获取返回数据,代码如下:
//utils/poll.ts
/**
* @descripting 轮询功能
* @param {String} fn 请求接口方法
* @param {Number} delay 轮询间隔时间
*/
let timer: any = null;
export const polling = (fn:()=>any, delay: number) => {
timer = setTimeout(async () => {
const data = await fn();
if (data) {
polling(fn, delay);
}
}, delay);
};
export const cleanTime = () => {
clearTimeout(timer);
};
// model.ts
effects{
...
*query() {
polling(async () => {
const data = await fetchUser();
console.log(data);
return data ? true : false;
}, 1000);
}
}
但是polling内不能使用yield,所以如果要修改state的值还需要额外操作
思考:有没有方法可以将polling优化,直接在effects中使用?