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

Quote Generator因Promise未嵌入if语句及429错误显示undefined求助

解决名言生成器的undefined显示与429请求限制问题

你的问题出在两个核心点:

  • 异步逻辑处理错误:判断innerHTML的代码写在fetch的Promise链之外,会在请求还没完成时就执行,根本拿不到正确的返回结果
  • 未处理接口限流:429错误是频繁点击触发了接口的请求频率限制,此时接口不会返回正常的名言数据

下面是修复后的完整代码:

let btn = document.getElementById("btn")
let quote1 = document.getElementById("quote")
let isFetching = false // 标记是否正在请求,防止重复触发

function quote() {
    // 如果正在请求,直接返回,避免频繁触发限流
    if (isFetching) return
    
    isFetching = true
    btn.disabled = true // 可选:禁用按钮,给用户明确的交互反馈

    const options = {
        method: 'GET',
        headers: {
            'X-RapidAPI-Key': '', // 记得填上你的API Key
            'X-RapidAPI-Host': 'quotes15.p.rapidapi.com'
        }
    };

    fetch('https://quotes15.p.rapidapi.com/quotes/random/', options)
        .then(response => {
            // 先判断请求是否成功,429这类非200状态码会走这里
            if (!response.ok) {
                throw new Error(`请求失败:${response.status}`)
            }
            return response.json()
        })
        .then(response => {
            // 直接检查返回的content是否有效
            quote1.innerHTML = response.content ? response.content : "Sorry, we couldn't find a quote for you. Please try again later."
        })
        .catch(error => {
            // 处理所有异常:限流、网络故障、数据格式错误等
            console.error(error)
            quote1.innerHTML = "Sorry, we couldn't find a quote for you. Please try again later."
        })
        .finally(() => {
            // 请求完成(成功/失败)都重置状态
            isFetching = false
            btn.disabled = false
        })
}

关键修改说明:

  1. 异步逻辑修正:所有DOM更新和数据判断都放到Promise的回调链里,确保请求完成后再处理结果
  2. 防重复请求:用isFetching变量和按钮禁用功能,从根源减少频繁点击导致的429错误
  3. 完善错误处理:
    • 通过response.ok捕获429这类限流错误
    • 添加catch块处理所有异常情况
    • 用finally统一重置请求状态,保证按钮能恢复可用
  4. 更可靠的有效性判断:直接检查接口返回的response.content,比判断DOM内容更准确

这样修改后,不管是触发限流还是接口返回异常,都会正确显示提示文本,同时避免了重复请求导致的429错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:50:24