首页 > 解决方案 > Axios 在单独的函数中返回未定义

问题描述

大家早上好!我在从其他函数获取 axios 响应时遇到问题。具体来说,我正在咨询我在另一个网站上创建的服务,并让它返回一个数据库名称。目前,当我使用 Postman 上的标头直接调用 api 时,它可以工作,并且在我使用 axios 创建的 getDbName() 函数中完成时也是如此,但是当我尝试将该响应返回到另一个响应时,它会打印出“未定义”。我的理解是,只要使用 response => 箭头函数,调用就会正确地等待响应。我在这个假设上错了吗?

我尝试了许多不同的返回变量的尝试。我使用下面 SO 上的许多链接进行了调查,但我仍然无法让它工作:

axios promise 在“axios.all”函数中返回正确的值,但在“then”函数中未定义

Axios 在控制台上打印值但返回未定义

带有 axios 返回未定义的 GET 请求

[dbController.js]
import axios from 'axios';
import apiconfig from '../config/apiconfig';

function getDbName() {
  return axios({
    method: 'GET',
    url: `${apiconfig.cb_url}/api/DbToBeWorked`,
    headers: apiconfig.optionsHeaders,
  }).then(dbn => {
    console.log(dbn.data.db); //logs database name correctly
    return dbn.data.db;
  });
};

[routes.js]
import { Router } from 'express';

const routes = new Router();

routes.get('/api/test', (req, res) => {
  getDbName().then(dbn => {
    console.log(dbn) //this logs 'undefined'
    return res.status(200).json(dbn);
  });
});

两个 console.logs 的输出都应该是 dbn(数据库名称)。目前,一个返回正确的名称,另一个返回 undefined。

标签: javascriptnode.jshttpaxiosbackend

解决方案


const getDbName = function () {
 return new Promise((resolve, reject) => {
    axios({
        ///----
    })
        .then(response => {
            resolve({
                // Do something 
            })
        })
        .catch(err => {
            reject({
                // Do something
            })
        })
  })

}

routes.get('/api/test', async(req, res) => {
 try{
  await getDbName()
 }catch(error)
  /// error

});

推荐阅读