javascript - Axios 在单独的函数中返回未定义
问题描述
大家早上好!我在从其他函数获取 axios 响应时遇到问题。具体来说,我正在咨询我在另一个网站上创建的服务,并让它返回一个数据库名称。目前,当我使用 Postman 上的标头直接调用 api 时,它可以工作,并且在我使用 axios 创建的 getDbName() 函数中完成时也是如此,但是当我尝试将该响应返回到另一个响应时,它会打印出“未定义”。我的理解是,只要使用 response => 箭头函数,调用就会正确地等待响应。我在这个假设上错了吗?
我尝试了许多不同的返回变量的尝试。我使用下面 SO 上的许多链接进行了调查,但我仍然无法让它工作:
axios promise 在“axios.all”函数中返回正确的值,但在“then”函数中未定义
[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。
解决方案
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
});
推荐阅读
- javascript - Ejs页面未在简化版代码上呈现
- java - 并发执行事务时出现 HibernateException
- jquery - 如何在没有 Async:false Jquery 的 Each 循环中调用 Ajax
- shell - 为 spark-submit 创建通用 shell 脚本
- javascript - 如何在本地测试通过 Javascript 发送表单数据?
- python-3.x - IDLE 3.8.4 和 3.9.0b4 不会保存非 ascii 字符的文件
- python-3.x - 在 Discord 语音通道上播放音频文件 wile 文件正在生成
- javascript - 如何根据javascript中的某些标志获取特定对象属性数组的总和?
- java - 在 RxJava 中处理 PublishSubject 对象 内存泄漏
- amazon-web-services - 将 GCP 对象存储数据迁移到 AWS S3 存储桶