【问题标题】:Angular 6 & rxjs 6 - subscription returns undefinedAngular 6 & rxjs 6 - 订阅返回未定义
【发布时间】:2018-09-04 22:02:02
【问题描述】:

我正在使用 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
        });
    }
}

我被困住了。我没有更多的想法,也找不到任何有用的东西。

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

【问题讨论】:

    标签: sharepoint rxjs angular6 rxjs6


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这解决了问题。我会进一步阅读。
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多