gpt4 book ai didi

jquery - 使用 Promise 数组和 $.when 忽略 AJAX 错误

转载 作者:行者123 更新时间:2023-12-03 22:32:41 24 4
gpt4 key购买 nike

我有以下代码,可以从 YouTube 视频 ID 数组中获取 JSON。当所有视频都存在且查询成功时效果很好。它发送几个 getJSON 请求,当所有请求都完成时... $.when.done() 触发,我可以处理结果数据。

var
results = {},
promises = [];

$(document).ready(function() {

var
vids = [
'ozj2-bnTL3s',
'EAZ4Tlt8MQ4',
'Xn9o7cxqVoA'
// ,'this-videoid-doesnot-exists'
],
url = 'http://gdata.youtube.com/feeds/api/videos/{{vid}}?v=2&alt=json';

$.each(vids, function(idx, vid){
var
u = url.replace('{{vid}}', vids[idx]),
p = null;

p = $.getJSON( u ).done(function(data) {
results[vid] = data.entry;
});

promises.push(p);
});

$.when.apply($, promises).done(function(){
console.log(results);
});

});

但是...在最终的应用程序中,我无法控制所有视频是否仍然存在于 YouTube 中,我意识到有时列表中的一个(或多个)视频可能已被删除...或者我从数据库获取的 ID 不正确。

有什么方法可以安全地将成功白化触发 $.when.fail() 的视频添加到结果变量中?并等待所有查询完成。 .

我的意思是,我的最终目标是从存在的视频中获取数据(那些数据已成功检索的视频),并且以某种方式忽略那些不存在或不可用的视频......而我不'现在不知道该怎么做。

任何想法/方法都将受到赞赏。蒂亚!
您可以在this JSFiddle中找到代码

最佳答案

不幸的是,jQuery 没有提供此功能。

很高兴,您可以轻松地自己实现它。

var url = 'http://gdata.youtube.com/feeds/api/videos/{{vid}}?v=2&alt=json';
function getVideo(vid){
var u = url.replace('{{vid}}', vid);
return $.getJSON( u ).then(function(res){
return {video:vid,result:res.entry};
});
}
var promises = ['ozj2-bnTL3s','EAZ4Tlt8MQ4',"doesn'texist"].map(getVideo);

some(promises).then(function(results){
for(var i = 0; i < results.length; i++) {
console.log(results[i]); // log
}
});



// get a hook on when all of the promises resolve, some fulfill
// this is reusable, you can use this whenever you need to hook on some promises
// fulfilling but all resolving.
function some(promises){
var d = $.Deferred(), results = [];
var remaining = promises.length;
for(var i = 0; i < promises.length; i++){
promises[i].then(function(res){
results.push(res); // on success, add to results
}).always(function(res){
remaining--; // always mark as finished
if(!remaining) d.resolve(results);
})
}
return d.promise(); // return a promise on the remaining values
}

这是一个working JSFiddle的结果。

关于jquery - 使用 Promise 数组和 $.when 忽略 AJAX 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com