Angular2 http.post:使用subscribe创建promise

时间:2017-07-08 16:49:44

标签: javascript angular typescript ionic2

我正在尝试创建一个函数,它返回一个Promise作为代码:(someprovider.ts)

ggplotly(v, width=800)

}

问题是,当我调用这个函数时,我没有得到数据,因为这个帖子需要几秒钟才能完成,我会在完成后得到答案。

postToPaymentApi(url:string, data:string, options:RequestOptions, order:Order):Promise<any>{
let result =  this.http.post(url, data, options).map(res => res.json())
  .subscribe(data => {
    // all my logic here!
    });
  }, error => {
    console.log(error)
  })

  return new Promise((resolve)=>{
    resolve(result)
  })

我做错了什么?

2 个答案:

答案 0 :(得分:5)

如果你想创建一个返回promise的函数,你的函数应该是:

postToPaymentApi(url:string, data:string, options:RequestOptions, order:Order):Promise<any >{
   return new Promise((resolve, reject) => {
          this.http.post(url, data, options)
           .map(res => res.json())
           .subscribe(data => {
             resolve(data);
            }
           }, error => {
             console.log(error)
             reject({error: error});
           });
        });
}

答案 1 :(得分:3)

Andre,您希望使用toPromise operator.map()返回的observable转换为promise。返回该运算符的结果

return http.post(...).map(...).toPromise()

现在返回一个正确的promise,所以调用代码可以这样使用它:

postToPaymentApi(...).then(
    data => console.log(data)
)