43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
|
|
export default {
|
||
|
|
|
||
|
|
create({
|
||
|
|
request,
|
||
|
|
getValue,
|
||
|
|
key=''
|
||
|
|
}){
|
||
|
|
let object:Record<string, any> = {
|
||
|
|
request,
|
||
|
|
getValue,
|
||
|
|
fail:false,
|
||
|
|
loading:false,
|
||
|
|
_callback:[],
|
||
|
|
_triggerAllCallback(fail){
|
||
|
|
if (this._callback) {
|
||
|
|
|
||
|
|
this._callback.forEach((item)=>{
|
||
|
|
return fail ? item.reject(): this._getTarget(item.data,item.resolve,item.reject);
|
||
|
|
});
|
||
|
|
this._callback = [];
|
||
|
|
}
|
||
|
|
},
|
||
|
|
_getTarget(data,resolve, reject){
|
||
|
|
return this.getValue(data).then(resolve).catch(reject);
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
const newGetValue = getValue.bind(object);
|
||
|
|
|
||
|
|
newGetValue.clear = function () {
|
||
|
|
object._data = undefined;
|
||
|
|
object.loading = false;
|
||
|
|
object._callback = [];
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
[key]: newGetValue,
|
||
|
|
['_'+key]: request.bind(object)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|