Angular 6 & rxjs 6 - 订阅 returns 未定义
Angular 6 & rxjs 6 - subscription returns undefined
我正在使用 Angular CLI 6.1.3、rxjs 6.2.2。
我的问题:
我实施了一项服务 RespSearchService
,它负责从 Sharepoint 获取信息。
以下代码从 Sharepoint 请求 JSON:
public search(queryString: string): Observable<any> {
return from(
web.siteUsers
.filter("substringof(\'" + queryString + "\',Email)")
.get()
.then(v => {
console.log('search', v);
})
);
}
以上代码按预期工作,并将 JSON 记录到控制台。
我的问题出在我订阅 Observable
的另一个组件中,就像我在所有其他情况下所做的那样,它可以工作。但不知何故,它在这里不起作用。看起来 Observable returns 是一个空对象,因为控制台的日志显示 undefined
.
export class ClaimFormInfoComponent implements OnInit {
public claim: Claim = new Claim();
public results: any;
queryField: FormControl = new FormControl();
constructor(private data: DataService, private respSearch: RespSearchService) { }
ngOnInit() {
this.data.currentClaim.subscribe(claim => this.claim = claim);
this.respSearch.search("chri").subscribe((response: any) => {
this.results = response;
console.log('results', this.results); \-> results undefined
});
}
}
我卡住了。我没有更多的想法,也无法在互联网上找到任何有用的东西。
提前感谢任何提示或想法!
那是因为你return the .then()
as a promise,其中它是未定义的,因为你没有return回调里面的任何东西。
要摆脱未定义,您需要 return V 的值:
.then(v => {
console.log('search', v);
return v;
})
但话又说回来(对不起,双关语),您只想return .get()
承诺。如果你真的想控制台记录这些值,你可以使用 tap()
运算符:
public search(queryString: string): Observable<any> {
return from(web.siteUsers
.filter("substringof(\'" + queryString + "\',Email)")
.get()
)
.pipe(
tap(v => console.log('search', v))
);
}
我正在使用 Angular CLI 6.1.3、rxjs 6.2.2。
我的问题:
我实施了一项服务 RespSearchService
,它负责从 Sharepoint 获取信息。
以下代码从 Sharepoint 请求 JSON:
public search(queryString: string): Observable<any> {
return from(
web.siteUsers
.filter("substringof(\'" + queryString + "\',Email)")
.get()
.then(v => {
console.log('search', v);
})
);
}
以上代码按预期工作,并将 JSON 记录到控制台。
我的问题出在我订阅 Observable
的另一个组件中,就像我在所有其他情况下所做的那样,它可以工作。但不知何故,它在这里不起作用。看起来 Observable returns 是一个空对象,因为控制台的日志显示 undefined
.
export class ClaimFormInfoComponent implements OnInit {
public claim: Claim = new Claim();
public results: any;
queryField: FormControl = new FormControl();
constructor(private data: DataService, private respSearch: RespSearchService) { }
ngOnInit() {
this.data.currentClaim.subscribe(claim => this.claim = claim);
this.respSearch.search("chri").subscribe((response: any) => {
this.results = response;
console.log('results', this.results); \-> results undefined
});
}
}
我卡住了。我没有更多的想法,也无法在互联网上找到任何有用的东西。
提前感谢任何提示或想法!
那是因为你return the .then()
as a promise,其中它是未定义的,因为你没有return回调里面的任何东西。
要摆脱未定义,您需要 return V 的值:
.then(v => {
console.log('search', v);
return v;
})
但话又说回来(对不起,双关语),您只想return .get()
承诺。如果你真的想控制台记录这些值,你可以使用 tap()
运算符:
public search(queryString: string): Observable<any> {
return from(web.siteUsers
.filter("substringof(\'" + queryString + "\',Email)")
.get()
)
.pipe(
tap(v => console.log('search', v))
);
}