首页 > 解决方案 > 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
        });
    }
}

我被困住了。我没有更多的想法,也无法在互联网上找到任何有用的东西。

提前感谢您的任何提示或想法!

标签: sharepointrxjsangular6rxjs6

解决方案


那是因为您将 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))
        );
}

推荐阅读