我认为这不是一个非常复杂的问题,但我对如何使用Promise有点困惑。
有三个重要的例子:
结构如下:Component具有ToolService来执行函数 - 例如function create()。 ToolService有HttpService,create()方法如下所示:
public create(){
this.httpService.create().subscribe(
(data) => {
//some complex processing
},
(error) => {
//handling error
}
);
}
您可以猜到httpService.create()
会返回http.put()
问题是我想通知Component
create()
的结果。所以我的想法是create()
应该返回一个Promise,它将在(data)
时完成,并在(error)
时被拒绝。
我有点困惑如何做到这一点。也许我应该以其他方式做到这一点? 请提出建议。
答案 0 :(得分:1)
您的服务import {Http, Response} from '@angular/http';
import { Observable } from 'rxjs/Observable';
在您的服务构造函数中创建Http constructor(private http:Http){}
public create(parameterToBeSend : any){
return
this.http.put(`http://enter_your_service_url_here`,parameterToBeSend)
.map( (response: Response) => {
const data = response.json();
return data;
})
.catch( (error: Response) => {
return Observable.throw('Something went wrong');
})
}
.map
将创建另一个可观察对象,在将数据发送到组件之前,您只需在此处理它即可。
.catch
如果你想发送任何自定义错误,那么这将是有用的,但要确保它不会返回一个Observable,所以你需要像我一样明确地转换它。
最后在您的组件中使用以下
public create(){
this.httpService.create().subscribe(
(data) => {//complex process},
(error) => {//handling error}
);
}
答案 1 :(得分:0)
您的“工具服务”应如下所示
create(): Observable<any> {
return this.httpService.create().map((response) => {
return response;
});
}
“组件”应该是这样的
this.toolService.create().subscribe((response) => {
// Do what ever you want here
});
希望这会对你有帮助!