当我尝试将GET方法发布到rest api时发生错误,但是在邮递员中它运行正常。
public cartview() {
let localaccesstoken = localStorage.getItem('token');
let apiUrl = this.urlService.apiUrl+'cart?access_token='+localaccesstoken;
console.log(apiUrl);
return new Promise((resolve, reject) => {
console.log("test : "+apiUrl);
this.http.get(apiUrl)
.subscribe(res => {
console.log("w3cert Url : "+JSON.stringify(res));
console.log(resolve(res));
}, (err) => {
console.log('w3cert : '+reject(err));
});
});
在控制台日志中,它显示一个api。我复制了该api并将其发布在postman中,并且可以正常工作,但是在应用程序中却显示此错误:
错误:“未捕获(在承诺中):[对象对象]”
答案 0 :(得分:1)
将您的方法更改为如下所示:
public cartview() {
let localaccesstoken = localStorage.getItem('token');
let apiUrl = this.urlService.apiUrl+'cart?access_token='+localaccesstoken;
console.log(apiUrl);
return this.http.get(apiUrl).pipe(
tap(res => console.log(res))
).toPromise() <--- rxjs wraps the observable in a Promise for you
});
我认为以上内容应类似于服务方法。因此,在您的组件中(或您希望兑现承诺的地方),您可以调用.then()方法:
...cartview().then(res => console.log(res)).catch(err => console.error(err))
从上面的代码中,我可以看到您在可观察对象/ promise方面工作得不好,而且,您正在记录resolve / reject方法本身,而不是结果。
答案 1 :(得分:1)
我认为问题出在您调用cartview()
函数的位置
您应该先调用它,然后同时捕获两者:
cartview().then(res => {
console.log(res)
}).catch(err => {
console.error(err)
})