Tag: 延期

jQuery.Deferred()。然后,如何解决多个参数

所以我的API期望当特定延迟被解决时它会得到2个参数。 fn().done(function(arg1, arg2) { console.log(arg1, arg2); }).fail(function(err) { console.error(err); }); 现在与上面的fn函数有关,它需要先等待其他一些延迟返回才能解析。 function other() { // stubbed out to always resolve return $.Deferred().resolve().promise(); } function fn() { return other().then(function() { return [1, 2]; }); } 但这不起作用,因为arg1将为[1, 2]而arg2将是undefined 。 我无法弄清楚如何从Deferred.then()第一个成功filter函数参数返回一些内容,以便生成的管道延迟解析多个参数。 我当然可以这样做: function fn() { var done = $.Deferred(); other().done(function(){ done.resolve(1, 2); }).fail(function(){ done.reject.apply(done, arguments); }); return done.promise(); […]

为什么在调用多次设置新$ .Deferred的函数时,我的延迟对象设置为已解决而不是挂起?

我试图让jQuery deferred工作并遇到一些问题。 我的系统使用postMessage从网站上的沙箱区域传递消息。 因此,当我从沙盒区域请求服务时,如下所示: // on click of button foo.requestService(options, function (response) { $(“#c”).val(response); // set value of input button } 在内部,我每次单击按钮时都会创建一个new $.deferred并且请求服务,如下所示: that.requestService = $.fn.requestService = function (options, callbackFunction) { var deferred = new $.Deferred(), callbackId = priv.generateUuid(), callback = deferred; // store callback to be retrieved by response handler priv.trackCallback(callbackId, callback, callbackFunction); // […]

使用jQuery中的延迟对象处理多个ajax调用的不同成功和失败状态

$.when为同时查询的所有多个ajax调用返回Deferred对象。 如果一切都成功.done()执行,如果任何一个url失败.fail()执行。 如何处理部分成功状态? (即)如果将5个url传递给$.when ,如果3个成功,我们需要处理成功状态,并且2失败,我们需要处理失败状态。 $.when($.getJSON(headerUrl), $.getJSON(tasksUrl), $.getJSON(testingTrackerUrl), $.getJSON(highlightsUrl))) .then(function(headerData, tasksData,testingTrackerData,highlightsData) { printData(headerData, tasksData,testingTrackerData,highlightsData); }) .fail(function(data, textStatus, jqXHR) { console.error(‘Got error in ‘+jqXHR); });

重用jQuery.post()/ jQuery.Deferred()对象

我正在寻找的最简单的例子是: var messageLoader = $.post(“api/user/messages”, {api:data}) messageLoader.done(function(data){ //do something }); 这项工作非常出色,但只有一次。 如果我想更新数据,我必须重新定义所有内容。 我似乎无法找到任何延迟对象的调用,让我重新启动它。 即messageLoader.redo() ,理想情况下会重新执行POST请求,然后调用相同的“完成”处理程序,而不必重新定义它。 我可以将它全部放在一个函数中并简单地再次调用该函数,但这不是我正在寻找的,因为我还想要这样做: var messageLoader = $.post(“api/user/messages”, {api:data}) var friendRequestLoader = $.post(“api/user/friendrequests”, {api:data}) $.when(messagesLoader, friendRequestLoader) .done(function (messages, friendRequests) { // update display of messages and friend requests // attach Handlers }); $(“#updateMessages”).click(function(){ messageLoader.redo() // This doesn’t exist }) 想法是单击$(“#updateMessages”)会重新执行该请求,然后$.when()处理程序将使用新的messageLoader数据和原始的friendRequestLoader数据。 我已经查看了类似这样的文档,但没有找到任何东西。 也许这里有人知道它是否存在,或者是一种完成同样事情的方法。

返回延迟的promise对象并解决它

我有一个forms的function: $.get_members = function() { var group_id = $(‘#gid’).val(); if($(this).val() == group_id) return; var deferr = $.Deferred(); $.get(url) .done(function() { … deferr.resolve(); }); return deferr.promise(); } 现在问题是:当group_id == $(this).val()时,如何处理情况? 我想做的只是: var members_deferr = $.get_members(); members_deferr.done(function() { … }); 一个想法是检查返回值的类型,但它不是很好。 第二个想法是解决setTimeout延迟,但我不知道它是否安全。 还有其他想法吗?

jQuery .when()。done()无效

我想首先说我是jQuery的新手,我怀疑我只是在做一些愚蠢的事情,所以希望这对某些人来说非常简单。 我正在尝试在我的网站上添加滑动移动子菜单。 我想要一个手风琴效果,如果我点击一个父链接,它的子子菜单打开,所有其他子菜单关闭。 问题是计时 – 子子菜单打开然后通过重置所有子菜单再次关闭。 我认为答案是使用延迟,但我尝试过的一切都失败了。 这是(目前无效)代码: function ResetMenu(){ jQuery(“.mobile-menu”).find(“.sub-menu”).slideUp(100); jQuery(“.mobile-menu”).find(“.menu-item-has-child”).removeClass(“open”); }; function OpenSubmenu(){ jQuery(this).next(“ul”).slideDown(100); jQuery(this).parent().addClass(“open”); }; jQuery(“li.menu-item-has-children > a”).click(function(){ if(jQuery(this).parent().hasClass(“open”)){ jQuery(“.mobile-menu”).find(“.sub-menu”).slideUp(100); jQuery(this).parent().removeClass(“open”); } else { jQuery.when(ResetMenu()).done(OpenSubmenu()); } return false; }); 任何帮助将不胜感激。 谢谢! Ronel

如何确定已读取所有文件并解决承诺

以下代码负责读取文件。 我的要求是如何查找是否已读取所有文件,以便我可以从父函数(readmultifiles)返回或解析promise。 $.when(readmultifiles(files)) .then(function(){//all files uploaded})) 上面的代码启动文件读取。 可以做什么,以便在读取所有文件时完成回调或可以返回。 function readmultifiles(files) { // Read first file setup_reader(files, 0); } function setup_reader(files, i) { var file = files[i]; var name = file.name; var reader = new FileReader(); reader.onload = function(e) { readerLoaded(e, files, i, name); }; reader.readAsBinaryString(file); // After reading, read the next file. } function readerLoaded(e, […]

不会解决延迟创建内存泄漏?

假设以下代码: var deferred = $.Deferred(); deferred.done(function(){ // do something with events, references to dom, etc… }); deferred.fail(function(){ // do something with events, references to dom, etc… }); 如果我从不结束调用resolve()或fail() ,这会导致内存泄漏,因为我在回调中保留了引用吗? 如果我打电话给一个,而不打另一个,那么另一个会被垃圾收集吗? 所以,如果我调用fail() ,jquery会删除done()吗? 我可能完全错了,但想澄清一下。 到目前为止我发现的最接近的是我总是调用JQuery Deferred.resolve或Deferred.reject? 。 但是用例有点不同,因为在该示例中,用户从未为fail()定义回调。 我也遇到过这个问题, jQuery deferreds会被取消吗? 但是我并不想取消deferred 。 我知道这不是最佳做法,但出于问题的目的,我仍然很好奇它是否会导致记忆问题。 谢谢,

如何知道递归异步任务何时完成

我有一个异步函数,它可以递归到自身。 我每次运行函数时都会将jQuery延迟添加到数组中,使用$.when()来检查所有promises是否已解析。 我的问题是,如果没有仲裁超时,我似乎无法做到这一点,因为我根本不知道函数何时停止递归并添加新的承诺。 这是一个JSBin演示 。 这是现实世界的例子 。

javascript中的顺序函数调用

我希望函数A完成执行,并且只有在函数B开始执行之后才能执行。 当我调用函数A然后调用函数B时,它们似乎都在同时执行。 在函数B完成后,我想调用第三个函数update_dropdown()。 我的代码如下所示: function A { for (var i = 0; i < 5; i++) { var promise = $.get(url+i); $.when(promise).then(function () { $.post(url); }); } } function B { var x = $.get(url); var promise = $.post(url+x); $.when(promise0).then(function () { update_dropdown(); }); } 请问您能告诉我如何按顺序进行这3个函数调用。