请求缓存,并调用回调
Posted PatWu16
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求缓存,并调用回调相关的知识,希望对你有一定的参考价值。
/**
* 请求缓存,并调用回调
*/
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);
}
}
}
// 使用promise
function 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);
})
});
以上是关于请求缓存,并调用回调的主要内容,如果未能解决你的问题,请参考以下文章
对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段