Angular2 http.post:通过订阅创建承诺



我正在尝试创建一个函数,该函数返回一个承诺作为代码:(someprovider.ts(

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)
})

}

问题是,当我调用这个函数时,我没有得到数据,因为这篇文章需要几秒钟才能完成,并且在帖子完成之前我得到了承诺。

this.postToPaymentApi(url, data, options, order).then(data => {
console.log(data);
})

我做错了什么?

如果你想创建一个返回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});
});
});
}

Andre,你想用toPromise运算符将.map()返回的可观察量转换为承诺。返回该运算符的结果

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

现在返回一个正确的承诺,因此调用代码可以这样使用它:

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

相关内容

  • 没有找到相关文章

最新更新