2012-11-20 31 views
2

我遇到了一個問題,我的鏈接返回的數據是第一個延期數據。第一個示例:Jquery鏈接時延遲的對象問題。然後

api.getData().done(function(data){ 
    api.getData2().done(
    function(data2){ 
     $.log('success', data2); 
    }); 
    }); 

但第二個例子SHOULD工作,具有第二。那麼數據2(),但由於某種原因它一樣DATA1。

api.getData().then(function(data1){ 
    return api.getData2(); 
}).then(
function(data2){ 
    $.log('success', data2); 
}); 

有什麼建議嗎?

+1

你能張貼'代碼api.getData2'?如果我沒有記錯,'api.getData2'必須返回一個promise對象才能正常工作,並且它還必須在某個時刻解析deferred對象。我自己有過這個問題。 –

回答

1

因此,一些研究JQuery Deferred.Pipe後,我發現我做不到鏈。於是,而是需要使用管道像下面(.pipe()是可鏈接):

api.getData().pipe(function(data1){ 
    return api.getData2(); 
}).then(
function(data2){ 
    $.log('success', data2); 
}); 
+0

此外,您可以使用.then完成鏈接(相當於.done和.fail) – Lucas

1

$.when將接受返回一個承諾兩個異步功能和執行當兩者都做了。那麼()函數:

$.when(api.getData(), api.getData2()).done(function(data, data2) { 
    $.log('success', data2); 
}); 

如果由於某種原因(如需要的數據),你需要前執行getData()getData2(),真的不需要.then(),因爲你的第一個例子似乎足夠有效嗎?