首页 > 解决方案 > 确保承诺失败

问题描述

也许以下内容按原样工作,但我不确定这是否是防止运行时出现任何可能问题的正确实现。

有这个:

  const ep = `${environment.api.baseUrl}/login`;
  return this.http.post<ILoginResponse>(ep, request).pipe(map(req => {
    this.storage.set(environment.storage_keys.token, req.access_token).then(() => {
      this.authState$.next(true);
    });
    return req;
  })).toPromise();

如果返回异常或因任何原因失败,我如何确保toPromise()将被拒绝?this.storage.set

标签: javascriptangular

解决方案


您始终可以使用 Promise 构造函数而不是toPromise创建自己的构造函数以进行更细粒度的控制:

const ep = `${environment.api.baseUrl}/login`;
return new Promise((resolve, reject) => {
  this.http.post<ILoginResponse>(ep, request).pipe(map(req => {
    this.storage.set(environment.storage_keys.token, req.access_token).then(() => {
      this.authState$.next(true);
      resolve(/* optionally return data here */);
    }).catch(e => reject(e));
  })).catch(e => reject(e)); // Assuming this.http.post returns a promise
})

推荐阅读