Tag: deferred

jsfiddle – 用jquery返回html时

在尝试使用jquery deferreds回显jsfiddle上的一些html时,我没有得到任何数据。 function showData(data1, data2) { console.log(data1[0]); console.log(data2); } function method1() { return $.ajax({ type: “post”, url: “/echo/html/”, data: JSON.stringify(“test1”), dataType: ‘html’ }); } function method2() { return $.ajax({ type: “post”, url: “/echo/html/”, data: {data: “test2”}, dataType: ‘html’ }); } $.when(method1(), method2()).then(showData); 我无法理解我在这里做错了什么。 将数据作为对象或JSON.stringify ,似乎都不起作用。 http://jsfiddle.net/VAy5g/

worklight 5.0.6 JsonRestStore,使用Promises

这最初是一个关于Worklight文档的问题,我发现我真正的问题是关于JQuery的Deferred / Promise API和promise.then()函数。 语境: 5.0.6 JsonRestStore API的文档提供了使用新Promisefunction的示例,它提供了两种可能的配方。 someFunction.then( successCallback, errorCallback, optionalProgressCallback); 和 someFunction().then(successCallback).fail(errorCallback) 正如评论和答案所述,这两种方法看起来实际上是相同的。 我的难点是JQuery文档声明then()返回一个“新的承诺”。 因此,在第二种情况下,我们编码: var p1 = someFunction(); var p2 = p1.then(successCallback); p2.fail(errorCallback); 我也看到人们建立了这样的行动“链”: someFunction().then(action2).then(action3).then(action4); 建立一系列异步操作。 所以我的问题变成了上面例子中承诺p1和p2之间的关系。 这与连锁理念有何关系? —编辑参考答案— 感谢cnandreu:关键是“错误沿着promise链传播,直到找到error handling程序。” 答案在这里很好地解释了 。

在jQuery v1.x中从$ .ajax承诺中捕获403

我在jQuery v1.x中从$.ajax承诺中捕获403时遇到问题。 相同的代码 $.ajax({ dataType: ‘jsonp’, url: ‘http://www.checkupdown.com/accounts/grpb/B1394343/’, type: ‘GET’ }).then(function () { console.log(‘success’, arguments) }, function () { console.log(‘error’, arguments) }); 拒绝jQuery v2.x中的预期,但在jQuery v1.x中没有任何记录(promise有readyState == 1 )。 这些示例分别使用2.1.3和1.11.3 jQuery版本。 为什么会发生这种情况呢? 它是否可以解决jQuery v1?

如何判断多个函数何时完成jQuery延迟

我有3个函数处理从AJAX中提取的数据,它们在调用ajax函数后更新页面。 当调用AJAX函数时,我显示了一个加载器,我希望在AJAX完成并且函数完成后隐藏加载器。 我怎样才能使用deferred with when然后在jQuery中测试所有3个函数完成后。 这是我的AJAX代码,此时隐藏了AJAX成功的加载器,理想情况下,这将是在3个function完成/成功之后。 3个函数接收要处理和显示在页面上的数据,它们不是AJAX函数。 function setUpStocking() { $.ajax({ url: url, cache: false, beforeSend: function(){ // Show loader $(‘.loader’).show(); }, success: function(data){ updateMyList(data.gifts); updateRecievedGift(data.recieved); updateGiftsOpenedToday(data.opened); // Hide loader $(‘.loader’).hide(); } }); } 这些函数在AJAX函数之外: function updateMyList(gifts) { // Get data, process it and add it to page } function updateRecievedGift(recieved) { // Get data, […]

什么是角度jQuery.when()的等价物

在jQuery中我们可以执行$.when( $.ajax( “/page1.php” ), $.ajax( “/page2.php” ) ).done(function( a1, a2 ) { … }); 有角度的等价物是什么? 我真的需要等待所有ajax调用完成然后做的事情。 谢谢。

不是作为jQuery Deferred执行的异步函数

假设我想以同步方式处理一些任务,所以我有这个function: function executePromiseQueueSync(queue){ var seed = $.Deferred(), finalPromise; finalPromise = _.reduce(queue, function(memo, promise){ return memo.then(function(){ return promise.funct.apply(null, promise.argmnt); }); }, seed.promise()); seed.resolve(); return finalPromise; } 现在我可以用它来处理一些文件: _.each(fileList, function(element, index, list){ _.each(element, function(el, idx, lst){ promisesQueue.push({funct: processFile, argmnt:[el, index + (len – fileList.length) ,len]}); }); }); 执行它并指出进度: executePromiseQueueSync(promisesQueue).then(function(){ …. }, function(){ …. }).progress(function(msg, progress, name, index, […]

for循环中的jQuery延迟行为

我最近在for循环中询问了一个关于jquery延迟行为的问题。 链接在这里 我得到了一个有效的答案,但我不明白为什么它有效。 如果我有以下代码: function update(callbacks) { return $.Deferred(function(dfr) { setTimeout(function() { callbacks.success() }, 1000); dfr.resolve(); }).promise(); } function updateElements(deferreds) { for (var i = 0; i < 5; i++) { (function() { var index = i; deferreds.push(update({ success: function() { alert(index); } })); })(); } }; (function() { var deffereds = []; updateElements(deffereds); $.when.apply($, […]

延迟jquery的计时问题

这个问题是经过精心提炼的非异步函数版本, 作为jQuery Deferred执行 。 我们有2个jsfiddles: http://jsfiddle.net/XSDVX/1/ – 尽管调用了notify()函数,但不会触发progress事件。 http://jsfiddle.net/UXSbw/1/ – 这里按预期触发进度事件。 唯一的区别是一行代码: setTimeout(dfd.resolve,1); 与 dfd.resolve(); 问题是: 当我们延迟解决时,如何捕获在此回调返回之前调用的.notify? 想一想。 .then获取从它的第一个参数返回的延迟对象,并从中创建一个新的延迟对象,绑定到它完成的进度和失败事件。 如果在返回deferred之前调用了notify,那么即使使用setTimeout,它是如何捕获它的? (感谢https://stackoverflow.com/users/400654/kevin-b询问此问题) 我可以摆脱setTimeout()并仍然有进程回调被解雇?

在JavaScript中,如何在超时中包装一个promise?

这是使用deffered / promise实现某些异步函数超时的常见模式: // Create a Deferred and return its Promise function timeout(funct, args, time) { var dfd = new jQuery.Deferred(); // execute asynchronous code funct.apply(null, args); // When the asynchronous code is completed, resolve the Deferred: dfd.resolve(‘success’); setTimeout(function() { dfd.reject(‘sorry’); }, time); return dfd.promise(); } 现在我们可以执行一些名为myFunc异步函数并处理超时: // Attach a done and fail handler for […]

不使用jquery实现Deferred对象

我想在不使用jQuery的情况下实现基本的Deferred对象。 在这里,我将仅实现已完成和失败的回调,具有解析和拒绝function。 和ofCourse将promise方法与此函数相关联。 我在纯js(编辑)中执行以下实现: function Deferred() { var d = {}; d.resolve = function() { d.done(arguments); } d.reject = function() { d.fail(arguments); } d.promise = function() { var x = {}; x.done = function(args) { return args; } x.fail = function(args) { return args; } return x; } return d; } var v; var setVal […]