为啥我得到 Promise 待处理而不是 Express 响应? [复制]

Posted

技术标签:

【中文标题】为啥我得到 Promise 待处理而不是 Express 响应? [复制]【英文标题】:Why do I got Promise pending instead of Express response? [duplicate]为什么我得到 Promise 待处理而不是 Express 响应? [复制] 【发布时间】:2021-01-17 01:11:51 【问题描述】:

我的代码,我是 Express 的新手。

app.get('/', (req, res) => 
   const name = req.query.name;
   const rank = req.query.rank;
   const headers = Object.entries(req.headers)
  .map(([key, value]) => `$key: $value`);
  
res.json( success: true, data :  name, rank  , headers : headers );
);

server = app.listen(3000);

const res = axios.get('http://localhost:3000?name=John Malone&rank=Captain');

console.log(res);

终端输出

Promise  <pending> 

我改变了我的代码,数据输出

  data: 
    success: true,
    data:  name: 'John Malone', rank: 'Captain' ,
    headers: [
      'accept: application/json, text/plain, */*',
      'user-agent: axios/0.20.0',
      'host: localhost:3000',
      'connection: close'
    ]
  


axios.get('http://localhost:3000?name=John Malone&rank=Captain')
   .then(function(data) 
      console.log(data.data.name); // Data response from server
   );

显示未定义。

【问题讨论】:

因为axios.get() 返回了一个承诺。所以,当你console.log() 它是返回值时,这就是你得到的——一个承诺。使用 .then()await 从该承诺中获取已解决的值。 因为 axios.get 返回一个承诺。 【参考方案1】:

这里有两个部分:

服务器部分是节点写的(快递)你做对了 客户端部分是由 axios 请求的

你得到 Promise 因为axios.get 返回一个Promise(一个异步请求)。所以在那种情况下,我猜你想将数据记录到控制台。你应该这样做:

axios.get('http://localhost:3000?name=John Malone&rank=Captain')
   .then(function(data) 
      console.log(data); // Data response from server
   );

【讨论】:

如何从输出中获取名称和排名? 嗯,这取决于你的数据,console.log(data)的结果是什么?

以上是关于为啥我得到 Promise 待处理而不是 Express 响应? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 fetch 返回 promise 未决?

如何检查 Promise 是不是处于待处理状态 [重复]

为啥我要使用 Redux Promise Middleware 而不是 Redux Promise?

为啥我的异步函数返回 Promise <pending> 而不是一个值?

为啥一个已解决的承诺仍处于待处理状态?

为啥 async/await Axios 请求不会返回 Data 而不是 Promise 对象 [重复]