无法将订阅的结果分配给引用的数组
Unable to assign result from subscription to referenced array
我希望我没有犯任何菜鸟错误,但我似乎无法理解这一点。
所以这是代码:
这是一个组件内部的函数
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" 参数可以正常获取它。
我怀疑来自订阅内部的 "refArray" 与我传递给函数的不完全相同,但我不知道如何解决它。
有什么想法吗?
编辑:打字错误
解决方案:
所以,谢谢马丁,这里是修改后的示例:
搜索功能
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;
},
);
您已将服务的结果值放入 refArray,因此显示这些值是正常的,但 resultArray 未定义,因为您确实将其作为未定义传递。函数调用前发生错误
如果我对你的问题的理解正确,你想将 service.search(term)
的结果分配给作为参考传递的 refArray
数组。
如果你只使用这个:
refArray = result
然后你用 result
覆盖局部变量 refArray
但这对引用(原始数组)没有影响。您刚刚重新分配了这个名为 refArray
.
的局部变量
但是,您可以使用任何就地修改数组的方法。例如,在循环中调用 refArray.push()
以追加 result
数组中的所有项目。尽管如此,这并不是使用 Rx 的最佳方式。
相反 return Observable:
search(term: string,service,refrray: any[]){
return service.search(term);
}
然后在需要的时候订阅它:
this.myService.search(...).subscribe(result => this.resultArray = result);
或者,如果您确实需要按照现在的方式使用它,请不要传递 refArray
并使用回调函数将结果分配给本地的 this.resultArray
范围。然后在调用 search()
方法时,您只需从 subscribe()
调用中调用回调。
我希望我没有犯任何菜鸟错误,但我似乎无法理解这一点。 所以这是代码:
这是一个组件内部的函数
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" 参数可以正常获取它。 我怀疑来自订阅内部的 "refArray" 与我传递给函数的不完全相同,但我不知道如何解决它。
有什么想法吗?
编辑:打字错误
解决方案:
所以,谢谢马丁,这里是修改后的示例: 搜索功能
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;
},
);
您已将服务的结果值放入 refArray,因此显示这些值是正常的,但 resultArray 未定义,因为您确实将其作为未定义传递。函数调用前发生错误
如果我对你的问题的理解正确,你想将 service.search(term)
的结果分配给作为参考传递的 refArray
数组。
如果你只使用这个:
refArray = result
然后你用 result
覆盖局部变量 refArray
但这对引用(原始数组)没有影响。您刚刚重新分配了这个名为 refArray
.
但是,您可以使用任何就地修改数组的方法。例如,在循环中调用 refArray.push()
以追加 result
数组中的所有项目。尽管如此,这并不是使用 Rx 的最佳方式。
相反 return Observable:
search(term: string,service,refrray: any[]){
return service.search(term);
}
然后在需要的时候订阅它:
this.myService.search(...).subscribe(result => this.resultArray = result);
或者,如果您确实需要按照现在的方式使用它,请不要传递 refArray
并使用回调函数将结果分配给本地的 this.resultArray
范围。然后在调用 search()
方法时,您只需从 subscribe()
调用中调用回调。