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

如何在fetch()作用域外获取拉取数据 避免返回pending状态Promise

问题根因

你代码里有两个核心错误导致拿不到预期数据:

  • GetWords()函数没有返回fetch()生成的Promise链,函数默认返回undefined,await一个undefined自然拿不到接口返回的单词数组
  • 所有异步接口请求都不会同步返回结果,async声明的函数本身就会返回Promise对象,你直接在同步代码里读取LoadWords()的返回值,打印时Promise还没从pending状态变为fulfilled,自然拿不到最终数据
修正代码
function GetWords() {
    // 补全return,返回整个fetch请求的Promise链
    return fetch("https://random-word-api.herokuapp.com/word?number=100")
        .then(response => response.json())
}

async function LoadWords() {
    const words = await GetWords()
    return words
}

// 异步结果必须在Promise状态变更后读取,两种常用写法二选一即可
// 写法1:通过then回调拿结果
LoadWords().then(words => {
    console.log(words); // 此处就能拿到预期的单词数组
})

// 写法2:在async上下文里用await拿结果
// async function run() {
//     const words = await LoadWords()
//     console.log(words);
// }
// run()
关键规则
  • JavaScript的异步逻辑不会阻塞同步代码执行,永远不要尝试在同步代码流里直接读取异步请求的返回值
  • 所有依赖接口返回数据的业务逻辑,必须放到.then()回调里,或者await关键字之后的异步上下文中执行

内容的提问来源于stack exchange,提问作者Amir Adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:21:26