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”不一样吗?