我有以下代码,这些代码是从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()的视频添加到结果变量中? 然后等待所有查询结束…
我的意思是,我的最终目标是从存在的视频中获取数据(已成功检索其数据),并且以某种方式忽略那些不存在或不可用的视频…而且我认为不正确现在该怎么做。
任何想法/方法将不胜感激。TIA!
您可以在
此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
}
这是结果的有效JSFiddle。
如果在转换期间模型拒绝承诺,则将中止转换,并且不会在控制台中显示新的目标路由模板和错误消息。 语法 (Syntax) Ember.Route.extend ({ model() { //code here }, actions: { error: function(reason) { // display or return the "F
问题内容: 我想查找包含字符串的行,如下所示: 但是,这失败了,因为某些元素是NaN: ValueError:无法使用包含NA / NaN值的向量建立索引 所以我诉诸于混乱 有没有更好的办法? 问题答案: 有一个标志: 参见文档: na:默认NaN,填充缺失值的值。 因此,您可以执行以下操作:
问题内容: 我有一个简单的网址数组,我想用jQuery加载每个网址。我正在使用,但是似乎无法使用它,所以我切换到了-我几乎可以使用它了,但是我得到的结果很奇怪。我希望有人可以帮助我改善这项工作。 这应该输出.. 步骤1.0 步骤1.1 步骤1.2 第2步 然后数组包含所有3个Ajax请求的结果。这可能吗? 问题答案: 首先,您必须决定是要并行处理三个ajax调用(同时运行所有ajax调用,而总运行
问题内容: 我刚刚从jQuery 1.3.2更新到1.4.3,并且在发出AJAX DELETE请求时看到了一些新行为。由于某种原因,在我的参数中传递的数据没有发送到服务器。例如: 最终向发送了DELETE请求,没有其他数据。但是,这种类型的调用可以很好地传递参数: 有没有其他人看到过类似的行为?有没有理由不再起作用(即:是设计使然,还是错误)?关于如何使其运作的任何建议? 此外,如果有人想知道为什
问题内容: 我想为ajax调用提供一种全局错误处理方法,这就是我现在所拥有的: 我需要忽略的错误。为null,为。我该如何检查? 问题答案: 我今天不得不处理相同的用例。我正在处理的应用程序具有这些长时间运行的ajax调用,这些调用可能会因1)用户导航离开或2)某种临时连接/服务器故障而中断。我希望错误处理程序仅针对连接/服务器故障而不是用户导航运行。 我首先尝试了Alastair Pitts的答
故事:因此,我正在运行一个WebDriver2测试套件,其中包含TestNG和捆绑在Maven体系结构中的所有测试套件。我首先在Eclipse项目中构建了所有内容,然后将其转换为Maven项目。我不是一个程序员,但我可以通过Java,我是新的Maven,但对TestNG和Selenium相当好,从我所研究的一切来看,我正确地接近了这一点,我一定错过了一些愚蠢的东西。 问题:我在Eclipse中用M