jQuery deferred - do I need pipes or chains to achieve this pattern?

回眸只為那壹抹淺笑 提交于 2019-11-27 02:25:10

问题


I'm trying to implement the folowing scenario, using JQuery deferred, without much luck.

What parts of the deferred api would you use, and how would you structure your calls to achieve the following:

1st ajax callA to serviceA retrieve a list of Ids

wait until this call returns

then n ajax calls to serviceB, each call using a using an Id from the list returned by callA

wait until all serviceB calls have returned

then a final ajax call to serviceC


回答1:


You could do like this (more or less pseudocode):

(function() {
    // new scope
    var data = []; // the ids coming back from serviceA

    var deferredA = callToServiceA(data); // has to add the ids to data

    deferredA.done(function() { // if callToServiceA successful...
        var deferredBs = [];

        for i in data {
            deferredBs.push(callToServiceB(...));
        }

        $.when.apply($, deferredBs).then(callToServiceC); 
    });

}());

The callToServiceX function should return the promise object returned by $.ajax.

There might be a "cleaner" solution than having data in a shared scope, with resolve, but the setup would be a bit more difficult (and not necessarily more readable).



来源:https://stackoverflow.com/questions/6647527/jquery-deferred-do-i-need-pipes-or-chains-to-achieve-this-pattern

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!