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

如何使用Twitter API嵌入推文JS工厂函数处理不可用推文

实现方案

你当前无法完成统计的核心原因有两个:

  1. 你是循环逐个调用createTweet方法,没有统一收集所有调用的返回状态做聚合统计
  2. 你把关闭加载遮罩的逻辑写在了单个请求的回调中,只要第一个请求返回就会触发定时关闭,此时其余请求可能还未返回,根本拿不到完整的统计结果

按照以下步骤修改即可实现需求:

  • 初始化两个计数器,分别记录加载成功的有效推文数、无法访问的无效推文数
  • 遍历所有待加载的帖子ID时,把每个createTweet返回的Promise统一收集到数组中,不要在单个请求的回调里处理全局逻辑
  • 单个Promise状态落定的时候就判断返回值,对应累加有效/无效计数,请求触发catch异常的场景统一归为无效推文
  • 用Promise.all等待所有推文加载请求全部处理完成后,再关闭加载遮罩,根据统计结果给用户展示对应提示:如果无效数等于总推文数,就告知用户所有内容均不可用;如果存在部分无效,就提示跳过的无效推文数量

参考实现代码:

// 初始化统计变量
let validCount = 0;
let invalidCount = 0;
const loadTaskList = [];
const tweetContainer = document.getElementById(twitter_area);

// 遍历所有待加载的推文ID
post_id_list.forEach(postItem => {
  const task = twttr.widgets.createTweet(
    postItem.post_id,
    tweetContainer,
    {}
  ).then(el => {
    // 单条推文加载完成后更新计数
    el === undefined ? invalidCount++ : validCount++;
  }).catch(err => {
    // 接口报错、网络异常等场景统一记为无效推文
    invalidCount++;
    console.error('单条推文加载异常', err);
  });
  loadTaskList.push(task);
});

// 等待所有加载任务完成
Promise.all(loadTaskList).then(() => {
  // 所有请求处理完成后再关闭遮罩
  hideOverlay();
  // 根据统计结果展示提示
  if (invalidCount === post_id_list.length) {
    alert('当前列表内的所有推文均不可访问(可能已被删除、发布者设为私密账号),暂无有效内容展示');
    return;
  }
  if (invalidCount > 0) {
    alert(`已为您跳过${invalidCount}条不可访问的推文`);
  }
});

注意:不建议在单个请求的回调里设置固定5秒定时关闭遮罩,弱网环境下很容易出现部分请求还未返回就提前关闭加载态的问题,会导致统计结果不准确。如果需要做超时兜底,可以给整个批量加载逻辑加全局超时判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:20