Wait for the first of multiple jQuery Deferreds to be resolved?

后端 未结 2 428
时光说笑
时光说笑 2021-01-16 19:06

With jQuery I know that I can use $.when() to wait for all of multipe Deferreds to be resolved. (Or for the first one to be rejected.)

2条回答
  •  误落风尘
    2021-01-16 19:55

    Based on Kevin B's code, here's an approach that uses a master Deferred object:

    var masterDeferred = new $.Deferred(),
        reqOne = $.post("foo.php"),
        reqTwo = $.post("bar.php");
    
    masterDeferred.done(function() {
        // do stuff
    });
    
    reqOne.done(function() {
        masterDeferred.resolve();
    });
    reqTwo.done(function() {
        masterDeferred.resolve();
    });
    

    I think I'm right in saying that the simplest form of resolving the masterDeferred would be :

    reqOne.done(masterDeferred.resolve);
    reqTwo.done(masterDeferred.resolve);
    

    But separate done functions will allow you to branch internally and call .resolve(), .reject(), .resolveWith(...) or .rejectWith(...) as appropriate, together with masterDeferred callbacks of the general form :

    masterDeferred.then( doneCallbacks, failCallbacks );
    

提交回复
热议问题