Open AlexZ33 opened 4 years ago
/**
* 类名 : scripts/utils/tiny-promise
* 描述: 提供页面ajax请求和数据缓存
* 创建人:
* 创建日期: 2017/12/5
*
* 修改历史
* 修改日期: <修改日期,>
* 修改人:
* 修改原因/修改内容: <修改原因描述> <问题单号: ${问题单号}>
*/
define('utils/tiny-promise', ['libs/moment-2.6.0'], () => {
const promise = {
/**
* 这里提供下success和fail,可以扩展其它方法,
* 约束:需要jquery已经引入,并作为全局变量
* 作用:部分方法返回数据需要缓存,但angular只能写拦截器,
* 调用此方法是保证已经有数据,并且直接传入即可
* @returns {*}
*/
createPromise() {
const me = this;
const dtd = $.Deferred();
const promise = dtd.promise();
$.extend(promise, {
_successStack: [],
_failStack: [],
success(f) {
_.isFunction(f) && this._successStack.push(f);
return this;
},
/**
*
* fail和error都执行_failStack函数队列
* @param f
* @returns {promise}
*
*/
fail(f) {
_.isFunction(f) && this._failStack.push(f);
return this;
},
error(f) {
_.isFunction(f) && this._failStack.push(f);
return this;
},
/**
* 代理处理正确和错误执行
* @param res
* @param successFlag
*/
execute(res, successFlag) {
successFlag ? dtd.resolve(res) : dtd.reject(res);
}
});
promise.then((res) => {
$.each(promise._successStack, (i, v) => {
const cloneRes = $.extend(true, {}, res);
v(cloneRes);
});
});
promise.fail((res) => {
$.each(promise._failStack, (i, v) => {
v(res);
});
});
return promise;
}
};
return promise;
});
回调 -promsie互相转化
https://github.com/RyanZim/universalify/blob/master/index.js