JQuery отложено - мне нужны трубы или цепи для достижения этого шаблона? - PullRequest
6 голосов
/ 11 июля 2011

Я пытаюсь реализовать следующий сценарий, используя JQuery deferred, без особой удачи.

Какие части отложенного API вы бы использовали и как бы вы структурировали свои вызовы для достижения следующего:

1-й вызов ajaxA к serviceA извлекает список идентификаторов

дождитесь, пока этот вызов вернет

, затем n вызовов ajax к serviceB, каждый вызов использует Id из возвращенного спискас помощью callA

дождитесь, пока все вызовы serviceB вернутся

, затем завершите ajax-вызов к serviceC

1 Ответ

12 голосов
/ 11 июля 2011

Вы можете сделать так (более или менее псевдокод):

(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); 
    });

}());

Функция callToServiceX должна возвращать объект обещания, возвращаемый $.ajax.

Возможно, существует более «чистое» решение, чем data в общей области, с resolve, но настройка будет немного сложнее (и не обязательно более читабельной).

...