/** * 申请缓存,并调用回调 */function cacheRequest(fn) { let hasReq = 1; // 未申请-1 申请中-2 申请胜利-3 let result = null; const cals = []; return function (...args) { const options = args[0]; const callback = args[1]; function myCallback(res) { hasReq = 3; result = res; for (let i = 0; i < cals.length; i++) { cals[i](res); } } console.log('hasReq', hasReq) if (hasReq === 1) { hasReq = 2 cals.push(callback); fn(options, myCallback); } else if (hasReq === 3) { callback(result); } else { cals.push(callback); } }}// 应用promisefunction cacheRequest2(fn) { let p = null; return function (...args) { const [options, callback] = args; if (!p) { p = new Promise((resolve) => { fn(options, (res) => { resolve(res); }) }) } p.then(callback); }}// 应用示例const fn = (options, callback) => { // 发动申请等,而后调用callback setTimeout(() => { callback(1); });}const cachedReq = cacheRequest2(fn)cachedReq({}, (data) => { console.log('data', data);})cachedReq({}, (data) => { console.log('data', data);})setTimeout(() => { cachedReq({}, (data) => { console.log('data', data); })});