我在Promise中做了一个axios post调用,并且我想在Promise然后方法中获得ajax respone 。
return new Promise((resolve, reject) => {
axios.post('/api/products/modify', product).
then(r => {
if(r && r.data && r.data.result) {
return {productId: r.data.result};
} else {
console.error("actions addproduct error occours during modifying the product! Error: " + r.data.error);
reject(r.data.error);
}
}).
catch((error) => {
console.error("actions addproduct; error occours during adding the product! Error: " + error);
reject(error);
});
}
});
当我致电p.then();
时,我想获得{productId: r.data.result}
对象。
我试过了:
p.then(r => {
console.debug("response: " + r);
});
但是不起作用。但是,ajax调用正在到达服务器,因此promise可以正常工作,但我无法将结果添加到then方法。
提前做出回应!
答案 0 :(得分:2)
避免使用Promise
constructor antipattern!您拥有的return
很好,但您只需throw
您的错误,然后使用then()
已为您创建的承诺:
return axios.post('/api/products/modify', product).then(r => {
if (r && r.data && r.data.result) {
return {productId: r.data.result};
} else {
console.error("actions addproduct error occours during modifying the product! Error: " + r.data.error);
throw r.data.error;
}
}, error => {
console.error("actions addproduct; error occours during adding the product! Error: " + error);
throw error;
});
或没有日志:
return axios.post('/api/products/modify', product).then(r => {
if (r.data.result) {
return {productId: r.data.result};
} else {
throw r.data.error;
}
});
答案 1 :(得分:0)
使用resolve()而不是return。
if(r && r.data && r.data.result) {
resolve({productId: r.data.result});
}