sharepoint - Angular 6 & rxjs 6 - 订阅返回未定义
问题描述
我正在使用 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 返回了一个空对象,就像控制台的日志说的那样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
});
}
}
我被困住了。我没有更多的想法,也无法在互联网上找到任何有用的东西。
提前感谢您的任何提示或想法!
解决方案
那是因为您将 the.then()
作为一个 promise返回,它是未定义的,因为您没有在回调中返回任何内容。
为了摆脱未定义的,你会想要返回 V 的值:
.then(v => {
console.log('search', v);
return v;
})
但话又说回来(对不起双关语),你只想回报.get()
承诺。如果你真的想控制台记录值,你可以使用tap()
操作符:
public search(queryString: string): Observable<any> {
return from(web.siteUsers
.filter("substringof(\'" + queryString + "\',Email)")
.get()
)
.pipe(
tap(v => console.log('search', v))
);
}
推荐阅读
- c++ - 如何正确地将鼠标坐标转换为 opengl 坐标?
- c# - 当azure函数停止时触发一个动作c#
- angular - 装饰器如何将其元信息传递给 Angular 2+ 中的组件类?
- node.js - 无论如何要在机器人构建器中获取“水印”值吗?
- linux - 我如何找到名称为String + Number的所有文件Linux
- lua - 在沙箱中加载非标准 lua 库(Lua 5.1/Luajit)
- postgresql - 您将如何在一个 select 语句中将两个 jsonb 对象与 id 结合起来?
- android - 将密钥传递给下一个活动
- javascript - 如何使 select2 与所有 unicode 关键字一起工作?
- java - 如何使用 OptaPlanner 和 Spring Boot 减少 SoftScore?