typescript - 在 Angular 中以这种方式创建 HTTP 服务是否正确?
这是 HTTP 服务,会发起一个 get 请求以获取 longArray.js;
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 ");
}
);
});
}
}
这是一个方法,会根据 longArray.js 是否被 HttpService 类中的 getHttpReq 获取来返回一个布尔值的 Promise;
getLongArrayTryOrFail(): Promise<boolean> {
return new Promise((resolve,reject) => {
this.httpService.getHttpReq('')
.then(response => resolve(true))
.catch(error => reject(false))
});
}
- 这种创建 HTTP 服务的方法正确吗?
- 基本上,getHttpReq(在类 HttpService 中)订阅一个 Observable,并根据订阅的成功响应或错误来解决或拒绝 promise。我说得对吗?
答案#1
- 这种创建 HTTP 服务的方法正确吗?
不,通常你不应该考虑将 Promise 与 Observable 一起使用。
- 基本上,getHttpReq(在 HttpService 类中)订阅一个 Observable,并根据订阅的成功响应或错误来解决或拒绝 Promise。我说得对吗?
你的 Promise 实现没有任何问题,但我不明白你为什么要回避使用 Observable。它拥有你所寻找的一切,并且它们是惰性的。下面是同样功能的 Observable 实现,仅用几行代码。
代码
export class HttpService {
constructor(
private http: Http
) {}
getHttpReq(url: string): Observable<any> {
return this.http.get('http://192.168.0.189/longArray.js')
.map(response => response.json());
});
}
}
//consumption
getLongArrayTryOrFail(): Observable<boolean> {
return this.httpService.getHttpReq('')
.map(response => true)
.catch(error => Observable.throw(false));
});
}
