Angular2中的Promise和Observable一起

时间:2019-06-06 05:02:34

标签: angular

我正在阅读Promise and Observable,但不确定我的代码是否对angular2 +有效

我在新的http客户端上使用Promise

return new Promise((resolve) => {
      this.http
        .get('http://x.x.com/api/x/' + x + '/' + x + '/' + x + '', {
          headers: this.authenticationService.getAuthorizationHeader()
        })
        .subscribe(
          (data: any) => {
            resolve(data.map((row) => {
              return new Candlestick(row.time, row.open, row.high, row.low, row.close, row.volume)
            }));
          },
          (error: HttpErrorResponse) => {
            if (error.error instanceof Error) {
              console.log('An error occurred:', error.error.message);
            } else {
              console.log(`Backend returned code ${error.status}, body was: ${error.error}`);
            }

            return resolve();
          });
    });

这个例子好还是不好?

1 个答案:

答案 0 :(得分:3)

代码看起来不错,但是如果您的目的是使用可观察的代码,则可以使用toPromise

this.http
.get('http://x.x.com/api/x/' + x + '/' + x + '/' + x + '', {
          headers: this.authenticationService.getAuthorizationHeader()
})
.toPromise()
.then()

另外,在您的代码中,您正在对我不对的错误执行resolve(),我最好将其称为拒绝。

您的代码更有意义,可以说是要重试还是进行其他任何酷的事情,但是如果您需要Promise,请使用toPromise。