如何在没有回调的情况下顺序调用axios函数

How to call sequentially axios functions without callback

我需要制作函数 syncCalltest 来顺序调用 axios 函数。
有什么方法可以在不修改 getPost1 getPost2 和 getPost3 的情况下按顺序使 syncCallTest 函数 运行?

function syncCallTest() {
    conole.log('before getPost');
    getPost();
    conole.log('after getPost and before getPost2');
    getPost2();
    conole.log('after getPost2 and before getPost3');
    getPost3();
    conole.log('after getPost3');
}

function getPost() {
  axios get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}

function getPost2() {
  axios get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}

function getPost3() {
  axios get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}

由于你的调用是 Promise,我认为你不能使 then 同步。

不过好像你需要的是按顺序调用,那就简单了;)

更改 postX 方法,使其 return 他们的 promise 然后级联 promise

function syncCallTest() {
  getPost()
    .then(getPost2)
    .then(getPost3);
}

function getPost() {
  return axios.get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}

function getPost2() {
  return axios.get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}

function getPost3() {
  return axios.get("http://example.com/posts/12345/")
    .then(reponse => {
      console.log(response);
    })
    .catch(error => {
      console.error(error);
    })
}