Rxjs 我如何将承诺与可观察到的东西结合起来?

Rxjs 我如何将承诺与可观察到的东西结合起来?,rxjs,angular8,rxjs6,Rxjs,Angular8,Rxjs6,我在承诺和观察方面遇到了麻烦。我有一些http请求,它们是使用承诺在包中定义的。在我的代码的其余部分中,我对各种事情使用了可观察的对象,包括其他http调用。在一个特定的部分中,我检查用户的承载令牌是否过期,如果过期,我将获得一个新令牌,然后继续剩余的呼叫 if (!token || token.exp < Math.round((new Date()).getTime() / 1000)) { from(this._store.refreshBearerToken()) .p

我在承诺和观察方面遇到了麻烦。我有一些http请求,它们是使用承诺在包中定义的。在我的代码的其余部分中,我对各种事情使用了可观察的对象,包括其他http调用。在一个特定的部分中,我检查用户的承载令牌是否过期,如果过期,我将获得一个新令牌,然后继续剩余的呼叫

if (!token || token.exp < Math.round((new Date()).getTime() / 1000)) {
  from(this._store.refreshBearerToken())
    .pipe(flatMap(resp => {
       let newToken = resp.data;
       newToken.exp = (new Date()).getTime() / 1000 + newToken.expires_in;
       localStorage.setItem('token', JSON.stringify(newToken))

       options = options || {};
       options.headers = new HttpHeaders({
         "Authorization": `${newToken.token_type} ${newToken.access_token}`,
         "Content-Type": "application/json"
        });
       return this._http$.request<T>(method, url, options as Object).pipe(share());
     }));
}
因为
this.\u store.refreshBealerToken
返回一个承诺,我将调用包装在
from
中,以将其转换为可观察的。这可以编译,但当它运行时,我得到“无法读取未定义的属性‘pipe’”

如何将此承诺转换为可观察的,以便刷新令牌,然后继续其余的调用

编辑:

我通过从“rxjs”导入{Observable,from}从导入

因此,我认为错误来自于行
.pipe(flatMap(resp=>…
),但我错了。错误来自于调用它的方法

GetInitialLinkList(): Observable<Institution[]>
{
    let base = { 'MemberId': localStorage.getItem('memberId') };
    let ins = localStorage.getItem("initialInstitutionList");
    if (ins)
    {
        return of(JSON.parse(ins));
    }
    return this._settingsService.get().pipe(
        flatMap(settings =>
        {
            this._settings = settings;
            return this._api.request<Institution[]>("Post", `${this._settings.mea}/GetInitialLinkList`, { body: base })
                .pipe(
                    retry(1),
                    catchError(this.handleError)
                )
                .pipe(flatMap(instList =>
                {
                    localStorage.setItem("initialInstitutionList", JSON.stringify(instList));
                    return of(instList);
                }))
        }));
}
根据Brandon所说的(我忘了返回/facepalm…),我添加了返回,因此我有
return From(this.\u store.refreshBealerToken())
,这将我的错误更改为

ERROR Error Code: undefined
Message: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
defaultErrorLogger @ core.js:6014

您能显示实际错误和发生错误的代码行吗?还可以显示从
导入
的位置和方式


我注意到您的代码段没有返回它通过(…)创建的可观察对象。管道(…)
也没有订阅它。它可能有助于显示您的代码实际如何使用此可观察对象。

哪行抛出错误?中的
返回可观察对象。@martin我添加了一些详细信息,您应该使用
点击(x=>sideEffect())
用于副作用,而不是
flatMap(x=>{sideEffect();返回(x);})
谢谢@Brandon,我来看看。否则,您仍然没有显示完整的代码示例。什么是
handleError
?您的原始代码实际调用在哪里?您的所有原始代码都是,都是代码片段。方法的其余部分在哪里?都是猜测,没有看到调用中涉及的所有方法chain./facepalm谢谢,我添加了返回,但仍然有错误。我的代码仍然需要一些工作,但主要是我缺少一个
返回
。我的
句柄错误
有问题,但这是另一个问题。感谢您在这方面的帮助。
private GetLinkList()
{
    this.showWaiting.emit(true);
    this._data.GetInitialLinkList().subscribe((result) =>
    {
        this.initialList = result;
        this.showWaiting.emit(false);
    });
}
ERROR Error Code: undefined
Message: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
defaultErrorLogger @ core.js:6014