Javascript 无法将订阅的结果分配给引用的数组
我希望我没有犯任何新手错误,但我似乎无法理解这一点。 下面是代码: 这是组件内部的一个函数Javascript 无法将订阅的结果分配给引用的数组,javascript,angular,typescript,rxjs,subscriber,Javascript,Angular,Typescript,Rxjs,Subscriber,我希望我没有犯任何新手错误,但我似乎无法理解这一点。 下面是代码: 这是组件内部的一个函数 search(term: string,service,refArray: any[]){ service.search(term) .subscribe( result => { refArray = result; console.log(refArray); // display result as it should c
search(term: string,service,refArray: any[]){
service.search(term)
.subscribe(
result => {
refArray = result;
console.log(refArray); // display result as it should
console.log(this.resultArray); // display "undefined"
},
err => {
refArray = [];
console.log(err);
},
() => {console.log('completed')}
);
}
然后,我这样使用它:
this.search(
searchTerm,
this.Service,
this.resultArray,
);
问题是,我的组件级声明变量“apiSpots”从未从订阅中获取结果,即使函数中的“refArray”参数正常获取结果。
我怀疑订阅内部的“重新排列”与我传递给函数的“重新排列”并不完全相同,但我不知道如何解决它
有什么想法吗
编辑:打字错误
解决方案:
thx致martin,这是修改后的样本:
搜索功能
search(term: string,service,callback: (result) => void){
service.search(term)
.subscribe(
result => {
callback(result);
},
err => {
callback([]);
console.log(err);
},
() => {console.log('completed')}
);
}
用法
let context = this;
this.search(
searchTerm,
this.Service,
function(result){
context.resultArray = result;
},
);
您已经将结果值从服务放到了重构数组中,因此它显示这些值是正常的,但是resultArray是未定义的,因为您确实将其作为未定义的对象传递。调用函数前出错。如果我正确理解了您的问题,您希望将
服务的结果分配给作为引用传递的重新排列数组
如果您仅使用此选项:
refArray = result
然后用result
覆盖局部变量refArray
,但这对引用(原始数组)没有影响。您刚刚重新分配了这个名为refArray
的局部变量
但是,您可以使用任何就地修改数组的方法。例如,在循环中调用refArray.push()
,以追加result
数组中的所有项。尽管如此,这并不是使用Rx的最佳方式
而是返回可观察到的:
search(term: string,service,refrray: any[]){
return service.search(term);
}
然后在需要时订阅:
this.myService.search(...).subscribe(result => this.resultArray = result);
或者,如果您确实需要以当前的方式使用它,请不要传递重新排列
,而是使用回调函数将结果分配给本地范围内的this.resultArray
。然后当调用search()
方法时,您只需从subscribe()
调用调用回调。我不明白,您的意思是“subscribe()”方法中的“refArray”和传递给函数的“refArray”不一样吗?