Reactjs 如何在express get调用中解决异步函数中挂起的承诺

Reactjs 如何在express get调用中解决异步函数中挂起的承诺,reactjs,express,axios,Reactjs,Express,Axios,我使用express.get()创建了一个api调用,其中还调用了一个异步函数来返回axios.get()请求。getTwitterData()异步函数仅返回promise pending。我如何解决这个问题 'use strict'; const axios = require('axios'); const express = require('express'); const app = express(); const jwt = require('express-jwt');

我使用express.get()创建了一个api调用,其中还调用了一个异步函数来返回axios.get()请求。getTwitterData()异步函数仅返回promise pending。我如何解决这个问题

'use strict';
 const axios = require('axios');
 const express = require('express');
 const app = express();
 const jwt = require('express-jwt');
 const jwks = require('jwks-rsa');
 const cors = require('cors');
 const bodyParser = require('body-parser');

 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: true }));
 app.use(cors());

 const auth = `OAuth oauth_consumer_key="D1X5bwx6tF5rNcC9J6iPDfhqP",oauth_token="4686534691-KcECHY2gBOtIqSAKrCYVFDKpOgkb1yNw5e3CCwk",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1521437993",oauth_nonce="peQkEX9wZZM",oauth_version="1.0",oauth_signature="U%2FG%2BLtMLOWQPUO3tHmwZk0iBrgY%3D"`;
 const url = `https://api.twitter.com/1.1/users/search.json?q=singer`;


 app.get('/api/twitter/data', (req, res) => {
   const tData = getTweetData().then((data)=>{
     return data;
   });
   console.log("tData: ", tData);
   res.json({tData});
 })

 async function getTweetData() {
   try{
     const data = await axios.get(url, { headers: { Authorization: auth }                     });
     return data;
   }catch(err){
     console.log(err);
   }
 }

 app.listen(3333);

 console.log('Listening on localhost:3333');

问题是
getTweetData()
实际上返回了一个承诺,这就是为什么
tData
显示为承诺待定。异步函数将返回一个承诺,您可以在

如果不再使用异步,我们可以采取以下措施

 app.get('/api/twitter/data', (req, res) => {
   const tData = getTweetData().then((data)=>{
     return data;
   });
   console.log("tData: ", tData);
   res.json({tData});
 })
并将其更改为处理承诺解析时将获得的响应数据

app.get('/api/twitter/data', (req, res) => {
       getTweetData().then((data)=>{
         //we have the data so just send the res here
         res.json({data});
       });
     })
另一种选择是将用于expressapi端点的匿名函数更改为使用async。注意:我不确定Express是否支持此功能,我只是演示如何使用异步函数编写此功能

   app.get('/api/twitter/data', async (req, res) => {
       const tData = await getTweetData()
       console.log("tData: ", tData);
       res.json({tData});
     })

问题是
getTweetData()
实际上返回了一个承诺,这就是为什么
tData
显示为承诺待定。异步函数将返回一个承诺,您可以在

如果不再使用异步,我们可以采取以下措施

 app.get('/api/twitter/data', (req, res) => {
   const tData = getTweetData().then((data)=>{
     return data;
   });
   console.log("tData: ", tData);
   res.json({tData});
 })
并将其更改为处理承诺解析时将获得的响应数据

app.get('/api/twitter/data', (req, res) => {
       getTweetData().then((data)=>{
         //we have the data so just send the res here
         res.json({data});
       });
     })
另一种选择是将用于expressapi端点的匿名函数更改为使用async。注意:我不确定Express是否支持此功能,我只是演示如何使用异步函数编写此功能

   app.get('/api/twitter/data', async (req, res) => {
       const tData = await getTweetData()
       console.log("tData: ", tData);
       res.json({tData});
     })

异步的第二个app.get确实可以工作,但是当我调用res.json({tData})时,我得到了“unhandledPromisejectionWarning:unhandledPromisejectionRejection(RejectionID:1):TypeError:Converting circular structure to json”这样的数据已经是json格式的,所以我还调用了其他东西吗?所以我需要以tData.data的形式访问数据。我不知道这是一个返回了密钥的对象。@AustinBorn如果这有效,请将答案标记为正确。感谢第二个app.get和异步确实起作用,但是当我调用res.json({tData})时,我得到了这个“未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:1):TypeError:将循环结构转换为json”数据已经是json格式,所以我调用了其他东西吗?所以我需要以tData.data的形式访问数据。我不知道这是一个返回了密钥的对象。@AustinBorn如果这有效,请将答案标记为正确。谢谢