无法将订阅的结果分配给参考阵列

问题描述:

我希望我没有犯任何菜鸟错误,但我似乎无法确定这一点。 因此,这里的代码:无法将订阅的结果分配给参考阵列

这是一个分量

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 

然后你重写本地变量refArrayresult但这对基准没有任何影响(原始数组)。您刚刚重新分配了名为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()呼叫的回叫。

+0

我现在明白了,谢谢。 –

你已经把从服务的结果值到refArray,所以它是正常它显示的值,但resultArray是未定义的,因为你没有通过它作为未定义。调用函数之前发生错误。

+0

我不明白,你的意思是在“subscribe()”方法中的“refArray”和我传递给函数的“refArray”是不一样的? –

+0

那个家伙正在回答正确 –