当前位置: 首页 > 知识库问答 >
问题:

如何解决express get调用中异步函数中的promise pending

孙熠彤
2023-03-14
'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');

共有1个答案

鱼征
2023-03-14

问题是getTweetData()实际上返回了一个promise,这就是为什么tData显示为promise挂起的原因。一个异步函数将返回一个promise,您可以在MDN上了解更多这方面的信息

在不再次使用异步的情况下,我们可以

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

并更改它以处理当promise解决时您将获得的响应数据。

app.get('/api/twitter/data', (req, res) => {
       getTweetData().then((data)=>{
         //we have the data so just send the res here
         res.json({data});
       });
     })
   app.get('/api/twitter/data', async (req, res) => {
       const tData = await getTweetData()
       console.log("tData: ", tData);
       res.json({tData});
     })
 类似资料:
  • 本文向大家介绍如何解决异步回调地狱?相关面试题,主要包含被问及如何解决异步回调地狱?时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 问题内容: 基于此答案,我想在一个将从另一个文件导入的类中构建一个异步websoket客户端: 然后将其导入中,其中包含以下内容: 但是它检索到以下错误: 这是怎么回事?如果mtest.get_ticks开头是单词,为什么我不能访问它? 问题答案: 最后,我可以找到正确的方法(特别感谢 @dirn ) 这在main.py中: 这是输出: 任何改进的技巧都值得欢迎!;)

  • 问题内容: 现在,我有几次遇到使用Firebase的同步和异步功能的问题。我的问题通常是我需要在我编写的函数中进行异步Firebase调用。作为一个简单的示例,假设我需要计算并显示对象的速度,而我的Firebase存储距离和时间: 当然,上述代码将无法使用,因为它是异步调用,因此在到达时尚未设置。如果我们将内部放置在回调函数中,则什么也不会返回。 一种解决方案是使我的函数也异步。 另一种解决方案是

  • 问题内容: 假设您维护一个公开一个函数的库。您的用户调用它来获取实际数据: 数据被保存在文件中,因此您可以使用内置的Node.js来实现。很明显这两个和是同步的功能。有一天,您被告知将基础数据源切换到只能异步访问的仓库(例如MongoDB)。还被告知要避免惹恼您的用户,API不能更改为仅返回promise或要求回调参数。您如何满足这两个要求? 使用回调/承诺的异步功能是JavasSript和Nod

  • 问题内容: 我想使用生成器yield和async函数。我阅读了本主题,并编写了以下代码: 但是我得到了错误: 语法错误:异步函数中的“ yield” 如何在异步功能中使用良率生成器? 问题答案: 更新: 从Python 3.6开始,我们有了异步生成器,能够直接在协程内部使用。 Python 3.5的旧答案: 您不能在协程内部。唯一的方法是使用/ magic方法手动实现异步迭代器。在您的情况下: 输

  • 问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调