当它在Promise链中时,如何获得axios响应?

时间:2019-09-16 19:19:06

标签: javascript promise axios

我有一些要理解的JavaScript代码。我有一个返回Promise的函数,在then块之一中,我有一个axios.post(来自axios库)。运行此功能时,在控制台中,我看到“完成此处”,但从未看到“发布完成”。我认为那是因为函数在axios.post响应返回之前完成了?那是对的吗?如果我也想在控制台中显示“发布完成”怎么办?

function X () {
  return new Promise((resolve, reject) => {
    if (x) {
      ...
      resolve();
    } else {
      ...
      reject();
    }
  }).then(() => {
    axios.post(
      url, 
      data
    ).then((response) => {
      ...
      console.log("post complete");
    });
  }).then(() => {
    ...
    console.log("finish here");
  });
}

1 个答案:

答案 0 :(得分:2)

您没有将axios承诺退还至主要承诺链。无论如何,您真的不应该嵌套这样的承诺;如果then或catch回调返回一个promise,它将冒泡到主链,并且可以从那里直接链接。尝试以下方法:

function X () {
  return new Promise((resolve, reject) => {
    if (x) {
      ///...
      resolve();
    } else {
      ///...
      reject();
    }
  })
  .then(() => axios.post(url, data))
  .then(response => {
    //...
    console.log("post complete");
  })
  .then(() => {
    ///...
    console.log("finish here");
  });
}