ajaxHooker更新版本后有问
request.response = res => {// console.log(res);
console.log(res.response.data.tasks);//原始是39
let tasks = res.response.data.tasks;
//弃用任务id
const discardTasks = ['100421', '100410', '100409', '100400', '100399', '100382', '100381', '100380', '100376', '100370', '100365', '100364',
'100363', '100362', '100361', '100360', '100359', '100358', '100357', '100356', '100352'];
//过滤弃用任务id
const result = tasks.filter(task => {
if (!discardTasks.includes(task.task_id + '')) {
return task;
}
});
console.log(result); //自己修改后是18
// result.push(newTask);
res.response.data.tasks = result; //这里没成功
console.log(res.response.data.tasks); //还是输出39
//console.log(result.length);
//value.response.data.total = 20;
}
我原来是1.0.2版本的,更新到最新后不生效了。。。
!(data/attachment/forum/202303/05/145741c2q2lc27z2qdzwp5.png)
这个response是json类型吧,xhr在获取引用类型的响应时每次返回的都是一个深拷贝(确保只读),即:
xhr.response !== xhr.response
所以你前面的修改无法影响后面的读取。解决办法是保存一下response引用,然后在最后做一次赋值操作:
const response = res.response;
//...
response.data.tasks = result;
//...
res.response = response;
这样应该就可以了,后续我考虑能不能再优化一下。 cxxjackie 发表于 2023-3-5 22:24
这个response是json类型吧,xhr在获取引用类型的响应时每次返回的都是一个深拷贝(确保只读),即:
所以 ...
可以了,不过确实比之前版本多走一步。 player 发表于 2023-3-8 13:59
可以了,不过确实比之前版本多走一步。
这个应该是可以优化的,后面版本我可能会做一次重构,代码太乱了,目前就先这样吧。1.2.x的改动挺大的,虽然用法上看不太出来,我已经尽量确保了跟旧版表现一致。
页:
[1]