2014-02-21 16 views
0

只是一小段代碼:如何鏈接jQuery中的延遲對象?

return $.when(
    $.get('/url1.json').done(function(r){ 
    //case 1 
    }), $.get('/url2.json').done(function(r) { 
    //case 2 
    }) 
).done(function(){return $.get('/url3.json').done(function(r){ 
    //case 3 
})}) 

這段代碼的含義:

  1. 奔跑得到了/url1.json/url2.json simultainiously和成功的情況下case 1運行的代碼和case 2分別爲
  2. 在成功案例/usr1.jsonurl2.json它運行得到爲/url3.json
  3. 返回延遲對象(或承諾,請不要介意,現在我看到的),這$.when收益(因此,由$.when的規則/url1.json/url2.json的對象)

我從它需要:
1。 ..
2 ...
3.返回這是由$.get('/url3.json')

所以返回延期對象,也許我需要像

$.when(...).flatMap(function() { return $.get('/url3.json') }) 

我有什麼辦法嗎?

+0

的'flatMap'你正在尋找被稱爲'** ** then'在[承諾](http://promisesaplus.com/) – Bergi

回答

4

只需撥打then而不是done即可將承諾更改爲傳入回叫的結果。

return $.when(
    $.get('/url1.json'), 
    $.get('/url2.json') 
) 
    .then(function() { 
    return $.get('/url3.json') 
    }); 

http://jsfiddle.net/5N9JJ/3/

+0

謝謝你,賈森。看起來這正是我需要的。我詢問之前檢查過jquery文檔,但不明白'then'的真正含義。 – Andrey