Javascript Axios GET请求返回空对象

Javascript Axios GET请求返回空对象,javascript,node.js,typescript,express,axios,Javascript,Node.js,Typescript,Express,Axios,“dataService”类中的“getData”函数执行对API的GET请求,“updateData”函数中的console.log确实打印了正确的信息,但返回了一个空对象http://localhost:xxxx/api/data'. 我认为这是由于异步的问题,但我不知道如何解决它。有什么想法吗 dataService.ts: import { Format } from '../types'; import axios from 'axios'; const token = proc

“dataService”类中的“getData”函数执行对API的GET请求,“updateData”函数中的console.log确实打印了正确的信息,但返回了一个空对象http://localhost:xxxx/api/data'. 我认为这是由于异步的问题,但我不知道如何解决它。有什么想法吗

dataService.ts:

import { Format } from '../types';

import axios from 'axios';


const token = process.env.TOKEN;

const url = `https://www.something.com/somequery?someapikey=${token}`;

const getData = async () => {
  try {
    const response = await axios.get<Format>(url);
    return response.data;
  } catch (error) {
    console.error(error);
  }
};

const updateData = async (): Promise<Format | undefined> => {
  const allData = await getData();
  console.log(allData, 'allData in backend');
  //edit allData to suitable format here
  return allData;
};

export default {
  updateData
};
index.ts:

import express from 'express';
const app = express();

...

import dataRouter from './routes/data';

...

app.use(express.json());

...

app.use('/api/data', dataRouter);

...

修复
getData
以返回承诺,成功时解决一个问题,失败时拒绝一个问题

当您使用异步函数时,它将返回承诺,特别是当您想等待它时

const getData = async () => {
 try {
    const response = await axios.get<Format>(url);
    return Promise.resolve(response.data);
 } catch (error) {
    console.error(error);
    return Promise.reject()
   }
};`

Response.send
应该从
updateData()
接收解析值,而不是从中接收返回值,因为异步函数的返回值是承诺对象,添加缺少的等待将解决问题:

res.send(await dataService.updateData());

尝试在getData functionLogging response中记录响应对象。“getData”中的logging response.data与在“updateData”中记录所有数据打印相同的输出。顺序为:response.data优先,allData第二。谢谢你的留言!这似乎不起作用。它给了我同样的结果。@kcin当console.log(response.data)看到数据时?是的。“const response=wait axios.get(url);”之后的“getData”中的Logging response.data与“updateData”中的Logging allData打印相同的输出。顺序是:response.data优先,allData其次。好的,我现在理解这个问题了。更新了answerI-did-dataService.updateData().then(data=>{res.send(data)}),这就成功了。非常感谢。谢谢你的留言!出于某种原因,我不喜欢你的答案,但我会试试看。
const updateData = async (): Promise<Format | undefined> => {
const allData = await getData();
console.log(allData, 'allData in backend');
//edit allData to suitable format here
return Promise.resolve(allData);
};
import express from 'express';
import dataService from '../services/dataService';

const router = express.Router();

router.get('/', (_req, res) => {
  dataService.updateData()
   .then(data=>{
     res.send(data)
    })
   .catch(error=>{})
 
 });

export default router;
res.send(await dataService.updateData());