2011-07-11 28 views
6

Tôi đang cố triển khai kịch bản folowing, sử dụng JQuery deferred, không có nhiều may mắn.jQuery hoãn lại - tôi có cần ống hoặc dây chuyền để đạt được mẫu này không?

gì các bộ phận của api chậm bạn sẽ sử dụng, và làm thế nào bạn sẽ cấu trúc các cuộc gọi của bạn để đạt được những điều sau đây:

1st ajax Calla để Serviceâ lấy một danh sách các Id

chờ đợi cho đến khi cuộc gọi này trả về

sau đó n ajax gọi đến serviceB, mỗi cuộc gọi bằng cách sử dụng một Id sử dụng từ danh sách được trả về bởi calla

chờ đợi cho đến khi tất cả các cuộc gọi serviceB đã trở

sau đó một ajax cuộc gọi cuối cùng để serviceC

Trả lời

12

Bạn có thể làm như thế này (giả nhiều hơn hoặc ít hơn):

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

}()); 

Chức năng callToServiceX nên trả lại đối tượng hứa trả về bởi $.ajax.

Có thể có giải pháp "sạch" hơn có data trong phạm vi được chia sẻ, với resolve, nhưng việc thiết lập sẽ khó hơn một chút (và không nhất thiết phải dễ đọc hơn).

+1

Cảm ơn bạn đã làm việc. Đây là một jsFiddle mà thực hiện các thiết kế: http://jsfiddle.net/zdam/kWP36/ – zadam

+0

@ zadam: Nice ví dụ :) Tôi vui vì nó đã làm việc! –

Các vấn đề liên quan