首页 文章

Angular 6&rxjs 6 - 订阅返回undefined

提问于
浏览
0

我使用的是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
        });
    }
}

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

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

1 回答

  • 0

    那是因为你return the .then() as a promise,它将是未定义的,因为你没有在回调中返回任何内容 .

    要摆脱undefined,你需要返回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))
            );
    }
    

相关问题