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

如何让多个fetch函数按照指定顺序执行?

问题原因

fetch 是异步API,你当前的写法是并行发送PUT和GET两个请求,GET请求本身没有额外请求体、服务端处理逻辑更轻,所以基本都会比PUT先得到响应,拿到的是点赞更新前的旧数据。

解决方法

你需要保证GET请求在PUT请求执行完成之后再触发,有两种常用写法:

写法1:把GET放到PUT的.then回调中

function liking(tweetid) {
    let l = document.querySelector('#numlikes-' + tweetid);
    fetch(`tweets/${tweetid}`, {
        method: 'PUT',
        body: JSON.stringify({
            tweet_like: 1
        })
    })
    // 等PUT请求完成后再执行GET
    .then(() => fetch(`tweets/${tweetid}`))
    .then(response => response.json())
    .then(post => {
        l.innerHTML = post.likes;
    });
}

写法2:用async/await语法,逻辑更清晰

async function liking(tweetid) {
    let l = document.querySelector('#numlikes-' + tweetid);
    // 等待PUT请求完成
    await fetch(`tweets/${tweetid}`, {
        method: 'PUT',
        body: JSON.stringify({
            tweet_like: 1
        })
    });
    // 再发GET请求拿更新后的数据
    const res = await fetch(`tweets/${tweetid}`);
    const post = await res.json();
    l.innerHTML = post.likes;
}

优化建议

如果你的后端接口支持,可以直接让PUT请求在处理完点赞逻辑后,直接返回更新后的点赞数,这样你不需要额外发一次GET请求,减少多余的网络请求,性能更好:

async function liking(tweetid) {
    let l = document.querySelector('#numlikes-' + tweetid);
    const res = await fetch(`tweets/${tweetid}`, {
        method: 'PUT',
        body: JSON.stringify({
            tweet_like: 1
        })
    });
    const post = await res.json();
    l.innerHTML = post.likes;
}

提示:建议补充.catch逻辑捕获请求异常,避免网络波动、接口报错时页面没有对应反馈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:45:03