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

为何将API调用结果存入cat变量时控制台输出Promise {<pending>}?

为什么调用async函数后控制台输出Promise {}?

嘿,这个问题其实是async/await机制里很常见的入门坑,我来给你掰扯清楚:

核心原因:async函数的返回值特性

所有async函数不管内部逻辑如何,默认都会返回一个Promise对象——哪怕你return的是一个普通值,它也会被自动包装成已resolved状态的Promise;如果函数还在执行异步操作(比如你的代码里的await got(...)还没完成),那这个Promise就会处于<pending>(待处理)状态。

你代码里的let cat = dog();这一步,只是调用了async函数dog,但并没有等待它内部的异步请求完成,所以cat拿到的就是还没完成的Promise实例,自然打印出来就是Promise {<pending>}了。

怎么拿到真正的响应结果?

有两种常用方式来获取async函数的最终返回值:

1. 在async函数内部用await等待(推荐,代码更简洁)

因为await只能在async函数里使用,所以你可以把打印逻辑放到一个async函数里:

const got = require('got');

let dog = async () => {
  try {
    const response = await got('https://api.coinpaprika.com/v1/coins/btc-bitcoin');
    return response;
  } catch (error) {
    console.log(error.response.body);
    // 这里最好抛出错误,让外部能捕获到失败情况
    throw error;
  }
}

// 新增一个async函数来处理结果
async function fetchAndLog() {
  let cat = await dog();
  console.log(cat); // 这里就能拿到真正的响应对象了
}

fetchAndLog();

2. 用Promise的.then()链式调用

既然async函数返回的是Promise,那我们可以直接用Promise的then方法来处理成功的结果:

dog().then(cat => {
  console.log(cat); // 异步完成后执行这里
}).catch(error => {
  // 处理请求失败的情况
  console.error('请求出错:', error);
});

额外小提示

你的dog函数里,catch块只打印了错误但没有抛出,这会导致如果请求失败,Promise会resolve为undefined,外部无法通过catch捕获到错误。所以建议在catch里加上throw error,这样外部的await或者.then().catch()就能正确处理失败场景啦。

内容的提问来源于stack exchange,提问作者Julian Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:52:44