Angular2如何创造内在可观察的承诺?

Angular2如何创造内在可观察的承诺?,angular,promise,angular2-services,angular-promise,Angular,Promise,Angular2 Services,Angular Promise,我认为这不是一个很复杂的问题,但我有点困惑如何使用承诺来解决这个问题 有三个重要的例子: 组成部分 HtppService 工具服务 其结构如下:组件有ToolService来执行函数——例如function create。 ToolService具有HttpService,创建方法如下所示: public create(){ this.httpService.create().subscribe( (data) => { //some complex proc

我认为这不是一个很复杂的问题,但我有点困惑如何使用承诺来解决这个问题

有三个重要的例子:

组成部分 HtppService 工具服务 其结构如下:组件有ToolService来执行函数——例如function create。 ToolService具有HttpService,创建方法如下所示:

public create(){

  this.httpService.create().subscribe(

    (data) => {
      //some complex processing
    },
    (error) => {
      //handling error
    }
  );

}
正如您所猜测的,httpService.create返回http.put

问题是我想通知组件create的结果。所以我的想法是create应该返回一个承诺,当数据出现错误时,该承诺将被实现,当出现错误时将被拒绝

我有点不知道怎么做。也许我应该换一种方式?
请提出建议。

您的工具服务应该如下所示

create(): Observable<any> {
   return this.httpService.create().map((response) => {
      return response;
   });
 }
希望这对你有帮助

在您的服务中从'@angular/Http'导入{Http,Response}; 从“rxjs/Observable”导入{Observable}

在服务构造函数中,创建Http构造函数的实例private Http:Http{}

.map将创建另一个可观察对象,在将数据发送到组件之前,您只需在此处进行处理。 .catch如果您想发送任何自定义错误,那么这将是有用的,但请确保它不会返回可观察的,因此您需要像我一样显式地转换它。 最后,在您的组件中使用以下内容

public create(){
this.httpService.create().subscribe(
 (data) => {//complex process},
 (error) => {//handling error}
);
}

订阅侦听器应仅位于组件中。直接调用httpService.create from Component,而不是从ToolService调用。@Srigar我不想这样做。我希望在ToolService内部处理响应,而不是在component中将函数引用作为参数从组件传递到ToolsService并订阅它。它会起作用的这不是我想要的我知道这会起作用,但我正在寻找其他的东西。我真的很想在create中返回一个observate或promise,就像你做的那样,但我想在subscribe中创建这个,不仅映射响应和传递,你不能从subscribe返回一个observate,但是如果你使用map而不是subscribe,那么将返回一个observate。你想创建自定义observate或promise吗?对我来说没有区别,我只想将复杂的处理提取到服务中
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');  
   }) 
  }
public create(){
this.httpService.create().subscribe(
 (data) => {//complex process},
 (error) => {//handling error}
);
}