无法将订阅的结果分配给引用的数组

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() 调用中调用回调。