微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular Promise尚未解决

如何解决Angular Promise尚未解决

我的班级中有一个subscribe函数,该函数订阅复选框切换的状态:

public subscribe(): void{
   ...
// Subscribe to toggle subject state
    this.subscription = this.isSet$
      .pipe(
        // Skip initial toggle state
        skip(1),// Update persisted FCM enabled state
        tap(isSet => {
          localStorage.setItem(PushService.localStorageKey,String(isSet));
        }),// Switch between function calls based on the toggle state
        switchMap(isSet => (isSet ?
          this.requestToken()
            .then(() => {
              console.log('RESOLVED REQUEST');
              this.cbdisabled = false;
            }) :
          this.deletetoken()
            .then(() => {
              console.log('RESOLVED DELETE');
              this.cbdisabled = false;
            }))))
      .subscribe();
}

switchMap中的两个承诺如下:

请求

private requestToken(): Promise<any> {

    console.log('REQUEST TOKEN FROM FIREBASE');

    return this.afMessaging.requestToken.pipe(
      mergeMap(devicetoken =>
        this.http.post<void>(
          formatEndpointUrl(environment.endpoints.communicationservice.web_push.register_device),{devicetoken}
        )
      )
    ).toPromise();
  }

删除

private deletetoken(): Promise<void> {

    console.log('DELETE TOKEN CALLED');

    return this.afMessaging.getToken.pipe(
      tap((devicetoken) => {
        this.afMessaging.deletetoken(devicetoken);
        console.log('DELETING TOKEN IN FIREBASE');
      }),mergeMap(devicetoken =>
        this.http.delete<void>(
          formatEndpointUrl(environment.endpoints.communicationservice.web_push.delete_device,{devicetoken})
        ).toPromise().then(() => {
           console.log('DELETING TOKEN IN BACKEND');
        })
      )).toPromise();
  }

当我将“开关”切换到“关闭”时,它将删除令牌,日志如下所示:

DELETE TOKEN CALLED
DELETING TOKEN IN FIREBASE
DELETING TOKEN IN BACKEND
RESOLVED DELETE

但是,当我将“开关”切换到“开”时,我得到了:

REQUEST TOKEN FROM FIREBASE

就是这样,Promise永远不会得到解决。我想念什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。