[英]Jest Mocked Function not calling mocked axios instance function (returns undefined)
[英]Axios returns undefined in separate function
大家早上好。 我在从不同的 function 获取 axios 响应时遇到问题,具体来说。 我正在咨询我在另一个网站上创建的服务并让它返回一个数据库名称,目前,当我直接调用 api 时,它的标题位于 Postman 上,它的工作原理与在 getDbName() 内部完成时相同axios,但是当我尝试将该响应返回到另一个响应时。 它打印出“未定义”,据我了解,只要使用响应 => 箭头函数。 电话会正确等待响应吗? 我在这个假设上错了吗?
我尝试了许多不同的返回变量的尝试。 我使用下面 SO 上的许多链接进行了调查,但我仍然无法让它工作:
axios promise 在“axios.all”function 中返回正确值,但在“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 的 output 应该是 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
});
我是个白痴,忘记导出 getDbName 以便路由读取它。 我有它被导入,但它没有从 [controller.js] 导出。 我发布的代码工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.