无法将订阅的结果分配给参考阵列
我希望我没有犯任何菜鸟错误,但我似乎无法确定这一点。 因此,这里的代码:无法将订阅的结果分配给参考阵列
这是一个分量
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,
);
的问题是,我的组件级别声明的变量“即使函数的“refArray”参数正常获取,“apiSpots”也不会从订阅中获得结果。 我怀疑订阅内部的“refArray”与我传递给函数的内容不完全相同,但我不知道如何解决它。
任何想法?
编辑:错字
SOLUTION:
所以,THX马丁,这里的修改样本: 搜索功能
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;
},
);
如果我正确理解您的问题,您希望将结果从service.search(term)
分配给作为参考传递的refArray
数组。
如果你只使用此:
refArray = result
然后你重写本地变量refArray
与result
但这对基准没有任何影响(原始数组)。您刚刚重新分配了名为refArray
的本地变量。
但是,您可以使用任何方法就地修改阵列。例如,在循环中调用refArray.push()
以追加result
阵列中的所有项目。尽管如此,这不是使用Rx的最佳方式。
而是返回可观察:
search(term: string,service,refrray: any[]){
return service.search(term);
}
然后订阅它,当你需要它:
this.myService.search(...).subscribe(result => this.resultArray = result);
或者,如果你真的需要使用它,你正在使用它的权利的方式现在不要通过refArray
,而是使用回调函数将结果赋给本地范围的this.resultArray
。然后在拨打search()
方法时,您只需拨打subscribe()
呼叫的回叫。
你已经把从服务的结果值到refArray,所以它是正常它显示的值,但resultArray是未定义的,因为你没有通过它作为未定义。调用函数之前发生错误。
我不明白,你的意思是在“subscribe()”方法中的“refArray”和我传递给函数的“refArray”是不一样的? –
那个家伙正在回答正确 –
我现在明白了,谢谢。 –