Angular 6和rxjs 6-订阅返回未定义

时间:2018-09-04 22:02:03

标签: sharepoint rxjs angular6 rxjs6

我正在使用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的组件中,就像我在所有其他情况下所做的一样,它起作用了。但是,在某种程度上,它将无法正常工作。控制台上的日志显示undefined时,Observable似乎返回了一个空对象。

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

我被困住了。我没有其他想法了,在互联网上也找不到有用的东西。

在此先感谢您的提示或想法!

1 个答案:

答案 0 :(得分:0)

这是因为您return the .then() as a 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))
        );
}