Axios在返回数据之前等待端点承诺

时间:2017-06-20 21:57:40

标签: node.js express axios

我有一个明确的端点,我称之为具有承诺的函数:

Express Server:

// endpoint
app.get('/test', function (req, res) {
  res.setHeader('Content-Type', 'application/json')
  let y = 1
  let x = 1
  let bar = foo(x, y)
  res.json({a: bar})
}

const foo = (x, y) => {
  // The promise
  sue.young(y, function(error, output) {
   // do stuff with x and output
   // console.log(output.result) // expected data in console
   // I need to return "output.result"
  })
}

查看:

let axiosClient = axios.create()
axiosClient.interceptors.request.use(async (config) => {
  return new Promise((resolve) => {
    axios.get('/test')
  }).then(res => {
    console.log(res)
  })
    .catch(e => {
      console.log(e)
    })
})

axiosClient.get('/test')
  .then(res => {
    console.log(res)
  })
  .catch(e => {
    console.log(e)
  })

我试图复制thisthis但没有运气;我一直收到一个空对象。

使用axios,在返回任何数据之前,我怎么能等到承诺完成?

1 个答案:

答案 0 :(得分:2)

您的问题是如何处理服务器中的Promise,而不是axios中的Promise。服务器代码没有等待Promise解决,只是在此之前返回json。所以你能做的就是回报诺言并等待它。

// endpoint
app.get('/test', function (req, res) {
    res.setHeader('Content-Type', 'application/json')
    let y = 1
    let x = 1
    foo(x, y).then(bar => {
        res.json({a: bar});
    });
}

const foo = (x, y) => {
    // The promise
    return sue.young(y, function(error, output) {
        // do stuff with x and output
        // console.log(output.result) // expected data in console
        // I need to return "output.result"
    })
}