标签: jquery-deferred

我有一个延迟对象数组,我怎么能用jQuery.when呢?它不需要数组

var promises = [promise1, promise2, promise3... promiseN];
Run Code Online (Sandbox Code Playgroud)

我该怎么用?

$.when(promise1(), promise2(), promise3(), ...promiseN()).then(function(){ doSomething()});
Run Code Online (Sandbox Code Playgroud)

我宁愿传递数组......任何想法我怎么能正确地做到这一点?显然这不起作用.

 $.when(promises).then(function(){ doSomething()});
Run Code Online (Sandbox Code Playgroud)

奇怪的是,失败,总是都接受数组.

谢谢,〜ck

javascript jquery jquery-deferred

2
推荐指数
1
解决办法
1363
查看次数

等待多个延迟对象完成

等待多个延迟对象完成时,为什么:

$.when(tasks).then(function() {
    document.write("Completed all requests." + "<br/>");
});
Run Code Online (Sandbox Code Playgroud)

立即执行

$.when.apply(null, tasks).then(function () {
    document.write("Completed all requests." + "<br/>");
});
Run Code Online (Sandbox Code Playgroud)

等到任务完成.

javascript jquery jquery-deferred

2
推荐指数
1
解决办法
2682
查看次数

对可变数量的ajax请求使用jquery deferreds

当我有一个可变数量的ajax请求时,如何使用延迟调用它们?

我猜:

//qty_of_gets = 3;

function getHTML(productID, qty_of_gets){

    var dfd = $.Deferred(),
            i = 0,
            c = 0;

    //this is where there could be some magic to 
    //do multiple ajax posts
    //obviously I'm out of my depth here...
    while (i <= qty_of_gets){

        dfd.pipe(function(){
            $.get("queries/html/" + product_id + i + ".php");
        });                       
    i++
    }
    dfd.done(function(){

        while (c <= qty_of_gets){
           $('myDiv').append(c);
           c++;
        }

    });
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

2
推荐指数
1
解决办法
2457
查看次数

使用jQuery延迟管理同步和异步JavaScript函数

我需要通过Socket.IO(客户端)通过websockets运行一系列调用.由于我没有使用$ .ajax,jQuery的延迟函数也不会集成,我将不得不手动处理promises.随着每个websocket调用,我通过回调,我很快就会看到这个项目如何失控.这是我的websocket调用如何工作的简化示例(不包括所有连接处理代码):

function js2node(nodeFunction, data, callback){
    socket.emit('incoming', nodeFunction, data, callback);
}

function sampleServerCall(){
    js2node('sampleCall', 'something', 'sampleCallback');
}

function sampleCallback(json){
    // Handle data
}

sampleServerCall();
Run Code Online (Sandbox Code Playgroud)

我将与服务器进行相当多的讨论,所有调用都将是异步的,但有些需要按特定顺序返回.输入jQuery deferred.这是一些工作代码:

var deferredArray = [];

$(function(){
    $.when(  // Any order
        getData1(),
        getData2()
    ).then(function(){  // Must have responses from dataCallback1 and dataCallback2 before doing this...
        $.when(  // Any order
            getData3(),
            getData4()
        ).then(function(){  // Must have responses from dataCallback3 and dataCallback4 before doing this...
            getData5();
        });
    });
});

function getData1(){
    js2node('data1', 'something', 'dataCallback1');
    deferredArray[0] = new $.Deferred(); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery asynchronous jquery-deferred

2
推荐指数
1
解决办法
793
查看次数

在jquery插件中添加done()函数,等待动画结束

我的问题是当我添加一个:

.done(function() {
  innerDef.resolve();                    
});
Run Code Online (Sandbox Code Playgroud)

在"动画"功能中,它不能按我的意愿工作.
我只是希望函数等到动画结束,如下所示:

$('#anim_vision').showThis().done(function(){
   alert('task finished!');
});
Run Code Online (Sandbox Code Playgroud)

我的完整插件代码:

(function ($) {

    $.fn.extend({    
        showThis: function (options) {    
            var def = $.Deferred();

            var options = $.extend(options);
            var deferredList = [];

            this.each(function () { 
                var innerDef = $.Deferred();
                deferredList.push(innerDef.promise());

                $( this )
                .children('.texto')
                .removeClass('opacity_none')
                .css('display','block');

                $( this )
                .animate({'height':'100%'}, 900, 'easeOutQuad')
                .done(function() {
                    innerDef.resolve();                    
                });
                });

            $.when.apply($, deferredList).done(function() {
               def.resolve(); 
            });

            return def.promise();
        }
    });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我真的需要帮助!

jquery plugins promise deferred jquery-deferred

2
推荐指数
1
解决办法
4112
查看次数

同步函数和异步延迟jQuery对象的混合

我想发送Ajax请求并在数据到达时执行一些无关的操作。完成动作后,我想等待Ajax完成并执行其他动作。

具体来说,让我们看一下剥离的示例:

$.ajax({url: "/reqA"})
    .done(updateA)
    .done($.ajax("/reqB").done(updateB))
    .done(updateFinal)
Run Code Online (Sandbox Code Playgroud)

updateFinal应同步的完成之后执行updateA和异步/reqB和同步跟随updateB

上面的代码是错误的,因为所有后续.done()操作均基于/regA和的竞争条件发生在updateB和之间updateFinal

我可以使用.then以下代码修复代码:

$.ajax({url: "/reqA"})
    .done(updateA)
    .then($.ajax("/reqB").done(updateB))
    .done(updateFinal)
Run Code Online (Sandbox Code Playgroud)

但是接下来我想updateA在发送请求后运行/reqB(因为JS引擎是单线程的,并且updateA执行阻止了异步进程/reqB!)。

以下代码不起作用:

$.ajax({url: "/reqA"})
    .then($.ajax("/reqB").done(updateB))
    .done(updateA)
    .done(updateFinal)
Run Code Online (Sandbox Code Playgroud)

因为updateA执行会延迟updateB执行!

我认为该问题可以通过$.when功能解决,但updateA不是承诺,并且在官方$ .when文档中我看不到执行顺序的保证。它可能看起来像:

$.ajax({url: "/reqA"})
    .then(
         $.when(
              $.ajax("/reqB").done(updateB),
              fakeResolvedPromiseWrapperAroundSyncFunc(updateA)
         )
    ).done(updateFinal)
Run Code Online (Sandbox Code Playgroud)

fakeResolvedPromiseWrapperAroundSyncFuncjQuery库中有任何标准解决方案吗?

在启动异步并随后加入异步调用的结果之后,还有其他路径来运行同步代码吗?

javascript jquery asynchronous promise jquery-deferred

2
推荐指数
1
解决办法
1733
查看次数

使用新的jQuery 1.6 $ .animate"promise"和回调之间的区别?

见这里:http://blog.jquery.com/2011/05/03/jquery-16-released/

这种新格式有什么区别:

$(".elements").fadeOut();

$.when( $(".elements") ).done(function( elements ) {
  // all elements faded out
});
Run Code Online (Sandbox Code Playgroud)

和老:

$(".elements").fadeOut(function() { /* all elements faded out */});
Run Code Online (Sandbox Code Playgroud)

jquery jquery-deferred

1
推荐指数
1
解决办法
1139
查看次数

如何顺序调用延迟函数?

我的代码:

<?php
if(isset($_GET['m'])) {
    $m = $_GET['m'];
    sleep($m);
    print "done, m=$m";
    die;
}
?>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
<script>

    function w(s) {
        document.body.innerHTML = document.body.innerHTML+ "<br>" + s
    }

    function aaa(def) {
        w("begin aaa");
        $.ajax({
            type: "GET",
            data: {
                m: 5
            }
        }).done(function(html) {
            w(html);
            def.resolve();
        });
    }


    function bbb(def) {
        w("begin bbb");
        $.ajax({
            type: "GET",
            data: {
                m: 1
            }
        }).done(function(html) {
            w(html);
            def.resolve();
        });
    }

    $(function() {

        $.when(
            $.Deferred(function(d) { aaa(d) }).promise(),
            $.Deferred(function(d) { bbb(d) }).promise()
        ).done(function() {
            w("OK") …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

1
推荐指数
1
解决办法
1933
查看次数

jsfiddle jquery ajax没有按预期返回数据

我正在尝试对jsfiddle进行jquery ajax调用但是遇到了问题:

var ajax1 = function () {
    return $.ajax({
        type: "post",
        url: "/echo/json/",
        data: {
            name: "thomas!"
        },
        dataType: 'json'
    });
};

var res = ajax1();
console.log(res);
Run Code Online (Sandbox Code Playgroud)

将整个延迟对象打印到控制台.它包括responseText我认为可能是我应该尝试访问的内容,但我未定义.

console.log(res.responseText);
Run Code Online (Sandbox Code Playgroud)

我之前用HTML 尝试了一次,一切似乎都有效,但JSON由于某种原因失败了.

javascript ajax jquery jsfiddle jquery-deferred

1
推荐指数
1
解决办法
651
查看次数

为什么在这个函数中返回jquery AJAX promise不能给我数据呢?

这个AJAX适用于jsfiddle

var a = $.ajax({
    url: "/echo/json/",
    type: "post",
    data: {
        json: JSON.stringify({
            a: true
        })
    },
    dataType: "json"
});

a.done(function (data) {
   console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

当我创建a函数并返回AJAX承诺时,为什么它不起作用?

var a = function () {
    return $.ajax({
        url: "/echo/json/",
        type: "post",
        data: {
            json: JSON.stringify({
                a: true
            })
        },
        dataType: "json"
    });
}

a.done(function (data) {

    console.log(data);

});
Run Code Online (Sandbox Code Playgroud)

这不是正确的语法吗?好吧,显然不是,但我怎样才能在函数中构建AJAX请求?小提琴

javascript ajax jquery deferred jquery-deferred

1
推荐指数
1
解决办法
815
查看次数