异步数据返回中未定义数据



控制器文件中的异步函数返回数据时出现问题
我想在"设数据";,但是它是未定义的,我不明白我的错误在哪里
(当然在我的异步函数概念中:(

这里是我的例子:

// index.js
const DataController = require('../controllers/DataController');
router.get('/test', function (req, res, next) {
let data = DataController.getData().then((resp) => {
console.log(resp); // <-------- here is undefined
});
});
// DataController.js
const axios = require('axios').default;
exports.getData = async function getData() {
return axios.get("https://it.lipsum.com/")
.then((response) => {
// console.log(response)
return response;
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
}

您需要从then调用返回数据。

// DataController.js
const axios = require('axios').default;
exports.getData = async function getData() {
return axios.get("https://it.lipsum.com/")
.then((response) => {
// console.log(response)
return response;
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function (res) {
// always executed
return res;
});
}

它的工作方式是Promise总是返回.then调用返回的最后一个值,所以您的最后一次.then调用返回的是undefined

关于let data =的小提示,因为调用是async,所以您将看到Promise,而不是promise将解析为的数据。您可以按以下方式使用async/await语法。

router.get('/test', async function (req, res, next) {
let data = await  DataController.getData();
});

像这样重构文件:

index.js

// index.js
const { getData } = require('../controllers/DataController');
router.get('/test', async (req, res, next) => {
try {
let data = await getData();
console.log(data);
return res.status(200).json(data);
} catch (error) {
console.log('ERROR: ', error);
return res.status(400).json({
success: false,
error
});
}
});

DataController.js

const axios = require('axios').default;
const getData = async () => {
try {
let response = await axios({
method: 'get',
url: "https://it.lipsum.com/"
});
return response
} catch (error) {
return error;
}
}
module.exports = { getData };

最新更新