Axios + Promise为then方法添加参数

时间:2018-04-11 14:49:30

标签: javascript ecmascript-6 axios es6-promise

我在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方法。

提前做出回应!

2 个答案:

答案 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});
}