Tag: deferred

动态多个延迟jQuery Ajax调用

使用jQuery http://api.jquery.com/jQuery.when/中的Deferred模式,我尝试进行多个jsonp ajax调用并等待结果,然后再转到下一步。 我可以使用固定数量的调用来完成此操作,因为我可以在“.done()”延迟对象中设置已解析参数的数量。 但是在我的应用程序中它不起作用,因为调用的数量是动态的并且总是未知的。 第一个简化示例有效,因为我可以设置.done()已解析函数中的args数。 我知道我需要两个,因为.when()中有两个调用: $.when( $.ajax( url1 ), $.ajax( url2 ) ).done(function( a1, a2 ) { var data = a1[ 0 ] + a2[ 0 ]; }); 这是我需要的但却无法使用它: var urls = GetUrlList(); // returns array of urls to json service var requests = []; // hold ajax request for (i = 0; […]

jquery自定义延迟函数

我有三个函数我正在尝试运行,前两个正在做一些异步的东西,需要第三个使用的数据。 我希望只有当1和2都完成时才会触发第三个函数。 这是一般结构,但最终function是在1和2结束前开始。 function run() { var data1 = {}; var data2 = {}; $.when(first(), second()).done(constructData()); function first() { var d = new $.Deferred(); //do a bunch of stuff async data1 = {}; d.resolve(); } function second() { var d = new $.Deferred(); //do a bunch of stuff async data2 = {}; d.resolve(); } function […]

Conjuring JQuery延迟了monadic咒语

受到这个 (优秀的)讨论在javascript中使用Promise的启发,我试图找出如何使用Deferred将异步和非异步函数链接在一起,以避免在使用我的“ 全局存储 ”代码时支付回调税。 我有几个与此相关的问题,但我会在这里一起问他们,因为背景是一样的。 我无法解决的一件事是我如何能够推断出非异步的东西 – 也就是说,如何获取值,将其包装在promise中并直接返回? ( a -> M ) 另外,我如何获取异步函数并将其包装,以便它直接返回结果,但包含在promise中? ( (a -> b) -> (a -> M) ) 最后一个问题,对于monadic怪胎 – 这个函数有一个标准名称吗? [a] -> (a -> M) -> M

如何将Angular承诺转换为jquery延迟对象

我想将我的模块/ sdk中的promises返回给非角度javascript。 例如,如果我向jquery返回promise,我应该发送jquery延迟对象。 如何将Angular承诺转换为jquery promise / deferred obj。 任何建议都非常感谢。

使用promises数组和$ .when忽略AJAX错误

我有以下代码从YouTubevideoID数组中获取JSON。 当所有video都存在且查询成功时,它的效果很好。 它发送了几个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); }); }); […]