订阅JavaScript中的地图数据结构不会';行不通
我一直试图观察JavaScript中Map对象的变化,但由于某些原因,只能观察对象的创建。在地图上添加/删除数据时,可观察对象是否不起作用 以下是可观察到的结果:订阅JavaScript中的地图数据结构不会';行不通,javascript,observable,Javascript,Observable,我一直试图观察JavaScript中Map对象的变化,但由于某些原因,只能观察对象的创建。在地图上添加/删除数据时,可观察对象是否不起作用 以下是可观察到的结果: test(): Observable<Map<string, Object>> { return of(this.testModel.test()); } test():可观察{ 返回(this.testModel.test()); } 这是我订阅的: test(): Observable<
test(): Observable<Map<string, Object>> {
return of(this.testModel.test());
}
test():可观察{
返回(this.testModel.test());
}
这是我订阅的:
test(): Observable<Map<string, Object>> {
let mapOb = this.testModel.test();
return Observable.create((obsrvr) => {
const originalSet = mapOb.set;
const originalDelete = mapOb.delete;
mapOb.set = (...args) => {
obsrvr.next(originalSet.call(mapOb, ...args));
};
mapOb.delete = (...args) => {
obsrvr.next(originalDelete.call(mapOb, ...args));
}
});
}
test():可观察{
设mapOb=this.testModel.test();
返回可观察的。创建((obsrvr)=>{
常量originalSet=mapOb.set;
const originalDelete=mapOb.delete;
mapOb.set=(…参数)=>{
obsrvr.next(originalSet.call(mapOb,…args));
};
mapOb.delete=(…参数)=>{
obsrvr.next(originalDelete.call(mapOb,…args));
}
});
}
我在创建映射期间看到log语句,但是如果我向映射添加任何新条目,则不会记录任何内容。有人知道为什么会这样吗
我在maoOb.set和mapOb.delete处遇到错误:
Type '(key: string, value: Object) => void' is not assignable to type '(key: string, value: Object) => Map<string, Object>'.
Type 'void' is not assignable to type 'Map<string, Object>'
Type'(键:字符串,值:对象)=>void'不可分配给Type'(键:字符串,值:对象)=>Map'。
类型“void”不可分配给类型“Map”
当您想要监听地图中数据的添加/删除时,您当前的方法似乎不正确
您只是使用(对象引用)的返回一个可观察的对象,这将无法知道您正在对与它一起传递的对象执行的操作
在MapInstance上执行set()或delete()时,需要有一个Observable
您可以通过这种方式修改地图实例以实现所需
createObservable(mapOb) {
return Observable.create((obsrvr) => {
const originalSet = mapOb.set;
const originalDelete = mapOb.delete;
mapOb.set = (...args) => {
const setReturn = originalSet.call(mapOb, ...args);
obsrvr.next(setReturn);
return setReturn;
};
mapOb.delete = (...args) => {
const deleteReturn = originalDelete.call(mapOb, ...args);
obsrvr.next(deleteReturn);
return deleteReturn;
}
});
}
将映射传递给createObservable()方法并订阅它。在这个方法中,我修改了地图的set
和delete
方法,以便在调用这些方法时它会发出一个值
我已经为答案创建了一个虚拟示例:当您想要监听地图中数据的添加/删除时,您当前的方法似乎不正确
您只是使用(对象引用)
的返回一个可观察的对象,这将无法知道您正在对与它一起传递的对象执行的操作
在MapInstance上执行set()或delete()时,需要有一个Observable
您可以通过这种方式修改地图实例以实现所需
createObservable(mapOb) {
return Observable.create((obsrvr) => {
const originalSet = mapOb.set;
const originalDelete = mapOb.delete;
mapOb.set = (...args) => {
const setReturn = originalSet.call(mapOb, ...args);
obsrvr.next(setReturn);
return setReturn;
};
mapOb.delete = (...args) => {
const deleteReturn = originalDelete.call(mapOb, ...args);
obsrvr.next(deleteReturn);
return deleteReturn;
}
});
}
将映射传递给createObservable()方法并订阅它。在这个方法中,我修改了地图的set
和delete
方法,以便在调用这些方法时它会发出一个值
我为答案创建了一个虚拟示例:您是指RxJS可观察的吗?如果是这样的话,搜索结果会返回多个结果,例如,“如果我向地图添加任何新条目,则不会记录任何内容”-为什么会记录任何内容?你没有地图变化的可观察性,你有一个可观察性,它发出一个值,地图本身。你的代码不完整,导致混乱。测试是否返回自身的可观察性?testModel.test()返回什么?承诺?@DaveNewton是的,我指的是RxJS可见物。@jonrsharpe你能再澄清一下吗?我怀疑我可能观察错了东西。你如何观察地图的变化?你指的是RxJSObservable
s吗?如果是这样的话,搜索结果会返回多个结果,例如,“如果我向地图添加任何新条目,则不会记录任何内容”-为什么会记录任何内容?你没有地图变化的可观察性,你有一个可观察性,它发出一个值,地图本身。你的代码不完整,导致混乱。测试是否返回自身的可观察性?testModel.test()返回什么?承诺?@DaveNewton是的,我指的是RxJS可见物。@jonrsharpe你能再澄清一下吗?我怀疑我可能观察错了东西。如何观察映射的更改?我得到一个错误:``Type'(键:字符串,值:对象)=>void'不可分配给Type'(键:字符串,值:对象)=>map'。类型“void”不可分配给类型“Map”```@BlueMoose,你能用你尝试过的任何东西更新你的问题吗?以及你得到错误的那一行吗?事实上它确实起作用了。我的错。非常感谢你的帮助@BlueMoose:我们没有返回值set/delete
,这就是它抱怨的原因。查看编辑,它现在不应该抱怨它。我得到一个错误:``Type'(key:string,value:Object)=>void'不能分配给Type'(key:string,value:Object)=>Map'。类型“void”不可分配给类型“Map”```@BlueMoose,你能用你尝试过的任何东西更新你的问题吗?以及你得到错误的那一行吗?事实上它确实起作用了。我的错。非常感谢你的帮助@BlueMoose:我们没有返回值set/delete
,这就是它抱怨的原因。查看编辑,它现在不应该抱怨它。