You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Promise中提取有效载荷?为何代码返回Pending Promise?

问题拆解与修复方案

兄弟,我帮你揪出问题所在了!你的代码核心问题出在两个关键地方:一是getInfo函数没正确返回带数据的Promise,二是你对Promise的.then返回值理解有误。咱们一步步来解决:

核心问题1:getInfo没返回有效的Promise

你给getInfo加了async关键字,但函数内部根本没有返回任何值,而且https.get是传统的回调式API,你没把它包装成Promise。这就导致getInfo()默认返回一个已resolved的空Promise(值为undefined),后续.then自然拿不到payload。

核心问题2:.then本身返回的还是Promise

你写的datastore.info = getInfo().then(val => val),这里的.then调用后返回的依然是一个Promise对象,所以直接console.log(datastore.info)肯定会输出Promise { <pending> }——因为异步操作还没完成,而且就算完成了,你也没在正确的时机去拿数据。


修复步骤

第一步:把https.get包装成Promise

我们需要手动用Promise包裹回调逻辑,让getInfo返回一个能传递payload的Promise:

const https = require('https');
const datastore = {};

function getInfo() {
  // 用Promise包裹整个http请求逻辑
  return new Promise((resolve, reject) => {
    https.get('https://www.gnu.org/software/bash/manual/html_node/Command-Line-Editing.html#Command-Line-Editing', (resp) => {
      let data = '';
      // 拼接接收的chunk数据
      resp.on('data', (chunk) => { data += chunk; });
      // 请求结束时,把数据resolve出去
      resp.on('end', () => {
        resolve(data);
      });
    }).on("error", (err) => {
      // 请求出错时,把错误reject出去
      reject(new Error("请求出错: " + err.message));
    });
  });
}

第二步:正确获取Promise中的payload

异步数据不能同步获取,必须在异步回调或await中处理:

方式一:用.then链式调用

getInfo()
  .then(payload => {
    datastore.info = payload;
    // 这里才能拿到真正的网页内容
    console.log(datastore.info);
  })
  .catch(err => {
    // 别忘了处理请求错误
    console.error(err);
  });

方式二:用await(更简洁的写法)

在Node.js环境下,你可以用立即执行的async函数来用await获取数据:

(async () => {
  try {
    // await会等待Promise resolve后拿到payload
    datastore.info = await getInfo();
    console.log(datastore.info);
  } catch (err) {
    console.error(err);
  }
})();

再给你划个重点

  • 只要是异步操作,就不能在同步代码里直接拿到结果,必须等异步完成后在回调或await后处理。
  • async关键字只是让函数返回Promise,但如果函数内部没有return具体值,它返回的就是Promise.resolve(undefined),没用。
  • 回调式API(比如https.get)必须手动包装成Promise,才能用async/await或者.then链式调用的方式优雅处理。

内容的提问来源于stack exchange,提问作者Ken Ingram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:51:44