1.业务分析
后端创建一个任务,该任务的结果无法快速的计算出来响应给前端,这个时候需要前端定时去查询任务状态,直到任务计算结束为止。
2.代码实现
/**
* polling 轮询请求
*
* @param {String} type 请求类型
* @param {string} url 请求路径
* @param {Object} params 请求参数
* @param {function} isPollingFn 回调函数,该函数返回Boolean值,true继续请求, false返回承诺
* @param {number} delay 请求延时时间,默认1000ms
* @param {object} options 其他选项
*
* @return {Promise} 返回一个promise对象
*/
Vue.polling = Vue.prototype.$polling = function (
type, url, params, isPollingFn, delay = 1000, options
) {
return new Promise((resolve, reject)=> {
this[`$${type}`](url, params, options).then((res)=> {
if (isPollingFn(res)) {
setTimeout(()=> {
this.$polling(
type, url, params, isPollingFn, delay, options
).then((r)=> {
resolve(r);
});
}, delay);
} else {
resolve(res);
}
}, (error)=> {
reject(error);
});
});
};