Angular2如何创建在内部执行Observable的Promise?

时间:2018-05-08 09:43:24

标签: angular promise angular2-services angular-promise

我认为这不是一个非常复杂的问题,但我对如何使用Promise有点困惑。

有三个重要的例子:

  • 组件
  • HtppService
  • ToolService

结构如下: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)时被拒绝。

我有点困惑如何做到这一点。也许我应该以其他方式做到这一点? 请提出建议。

2 个答案:

答案 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
});

希望这会对你有帮助!