【问题标题】:Unable to assign result from subscription to referenced array无法将订阅结果分配给引用的数组
【发布时间】:2017-03-27 11:38:34
【问题描述】:

我希望我没有犯任何新手错误,但我似乎无法弄清楚这一点。 代码如下:

这是组件内部的函数

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;
    },
  );

【问题讨论】:

    标签: javascript angular typescript rxjs subscriber


    【解决方案1】:

    如果我正确理解您的问题,您希望将 service.search(term) 的结果分配给作为参考传递的 refArray 数组。

    如果你只使用这个:

    refArray = result
    

    然后你用result 覆盖局部变量refArray 但这对引用(原始数组)没有影响。您刚刚重新分配了这个名为 refArray 的局部变量。

    但是,您可以使用任何就地修改数组的方法。例如,在循环中调用 refArray.push() 以附加 result 数组中的所有项目。尽管如此,这并不是使用 Rx 的最佳方式。

    而是返回 Observable:

    search(term: string,service,refrray: any[]){
      return service.search(term);
    }
    

    然后在你需要的时候订阅它:

    this.myService.search(...).subscribe(result => this.resultArray = result);
    

    或者,如果您确实需要以现在使用它的方式使用它,请不要传递refArray,而是使用回调函数将结果分配给本地范围内的this.resultArray。然后在调用search() 方法时,您只需从subscribe() 调用中调用回调。

    【讨论】:

      【解决方案2】:

      您已将服务中的结果值放入 refArray,因此它显示值是正常的,但 resultArray 是未定义的,因为您确实将它作为未定义传递。在调用函数之前发生了错误。

      【讨论】:

      • 不明白,你的意思是“subscribe()”方法里面的“refArray”和我传给函数的“refArray”不一样?
      猜你喜欢
      • 2015-02-17
      • 2023-04-07
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2019-06-26
      • 2014-06-04
      相关资源
      最近更新 更多