export default { create({ request, getValue, key='' }){ let object:Record = { 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) } } }