【发布时间】:2017-06-20 03:55:28
【问题描述】:
这是 HTTP 服务,发出一个获取 longArray.js 的 get 请求;
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/Rx';
@Injectable()
export class HttpService {
constructor(
private http: Http
) {}
getHttpReq(url: string): Promise<any> {
return new Promise((resolve, reject) => {
this.http.get('http://192.168.0.189/longArray.js')
.map(response => response.json())
.subscribe(
function(response) {
console.log("Success Response ");
resolve(response);
},
function(error) {
console.log("Error happened " + error);
reject(error);
},
function() {
console.log("Subscription is completed ");
}
);
});
}
}
这是一个返回 bool 承诺的方法,具体取决于 longArray.js 是否由 getHttpReq(在 HttpService 类中)获取;
getLongArrayTryOrFail(): Promise<boolean> {
return new Promise((resolve,reject) => {
this.httpService.getHttpReq('')
.then(response => resolve(true))
.catch(error => reject(false))
});
}
- 这种创建 HTTP 服务的方法正确吗?
- 基本上 getHttpReq(在类 HttpService 中)订阅一个 Observable 并根据订阅的成功响应或错误来解决或拒绝承诺。我说的对吗?
【问题讨论】:
-
为什么需要承诺?不能使用 Observable
-
如果你真的想返回一个promise,那么只需在
http.get返回的observable上使用toPromise()。
标签: angular typescript rxjs observable es6-promise