如何嵌套两个异步调用?Twitch API多接口顺序调用求助
没问题,这个需求其实很常见,核心就是利用第一个AJAX请求的成功回调来触发第二个请求,而且得注意Twitch Helix API的参数要求——查直播状态的streams端点需要用用户ID而不是登录名,所以第一步得从第一个请求的返回结果里提取用户ID。下面是具体的实现思路和代码示例:
实现思路
第一步:在第一个请求的成功回调中提取用户ID
你的第一个请求返回的用户数据里,每个用户对象都包含id字段,这是调用streams端点必须的参数(该端点不支持直接用login参数查询)。所以在第一个AJAX成功后,先把这些ID收集成数组。第二步:发起第二个AJAX请求查询直播状态
用收集到的用户ID,构造https://api.twitch.tv/helix/streams的请求URL,多个ID用&user_id=xxx拼接。记得要和第一个请求一样带上必要的验证头(比如Client-ID或者Authorization: Bearer <token>,现在Twitch API必须验证身份)。第三步:关联用户信息与直播状态
第二个请求返回的直播数据里,每个条目会包含对应的user_id,你可以把这个和之前的用户信息匹配,标记出哪些用户正在直播。
完整代码示例
// 第一个获取用户信息的请求 var getUserInfo = $.ajax({ type: "GET", url: "https://api.twitch.tv/helix/users/?login=ESL_SC2&login=freecodecamp&login=noobs2ninjas", headers: { // 注意:替换成你自己的Twitch开发者凭证 "Client-ID": "你的Client-ID", "Authorization": "Bearer 你的OAuth令牌" } }); // 第一个请求成功后触发直播状态查询 getUserInfo.done(function(userResponse) { // 从用户数据中提取ID数组 var userIds = userResponse.data.map(user => user.id); // 构造直播查询URL,拼接多个user_id参数 var streamsUrl = "https://api.twitch.tv/helix/streams?" + userIds.map(id => `user_id=${id}`).join("&"); // 发起第二个AJAX请求 $.ajax({ type: "GET", url: streamsUrl, headers: { "Client-ID": "你的Client-ID", "Authorization": "Bearer 你的OAuth令牌" } }).done(function(streamsResponse) { // 把直播数据转换成以user_id为键的对象,方便快速匹配 var liveUserMap = {}; streamsResponse.data.forEach(stream => { liveUserMap[stream.user_id] = stream; }); // 遍历用户信息,结合直播状态输出结果 userResponse.data.forEach(user => { if (liveUserMap[user.id]) { console.log(`${user.display_name} 正在直播:${liveUserMap[user.id].title}`); } else { console.log(`${user.display_name} 当前未直播`); } }); }).fail(function(error) { console.error("查询直播状态失败:", error); }); }).fail(function(error) { console.error("获取用户信息失败:", error); });
额外注意事项
- API验证要求:现在Twitch Helix API的所有端点都需要身份验证,你必须在请求头里带上
Client-ID和Bearer令牌,这些可以在Twitch开发者控制台申请获取。 - 错误处理:给两个请求都加上
fail回调,能及时处理网络问题、API限流或者凭证无效等异常情况。 - 批量查询限制:Twitch API对批量查询的参数数量有上限(比如
streams端点最多一次查询100个用户ID),如果你的用户列表超过这个数量,需要分批次请求或者使用分页。
内容的提问来源于stack exchange,提问作者Hacene .N
相关产品推荐
相关产品推荐

