2013-07-23 55 views
0

我想這樣做如下:如何使用延遲與基本的JavaScript功能?

dataservice.doThis(folderIds).then(doThat(setIds)); 

doThisdoThat不返回任何東西。我正在閱讀延期和承諾,但一直未能得到這個工作。我如何才能告訴doThatdoThis中的所有內容都已完成之前不會運行?

+1

您是否嘗試過實際使用' $ .Deferred'? http://learn.jquery.com/code-organization/deferreds/ –

回答

0

如果您打算使用then,您需要某種承諾系統(即使這意味着需要自己重新實施)。你不能做到這一點無需doThis回報承諾,但是,(它真的需要決心,承諾以及與ID,您就需要):

var dataservice = { 
    doThis: function doThis(folderIds) { 
     var future = new PromiseAPlusCompliantPromise(); 
     makeXHR("/some/endpoint", // endpoint 
       {folderIds: folderIds}, // data to send 
      function sucess(setIds) { // success handler 
       future.resolve(setIds); 
     }); 
     return future; // Note that we do have to return a promise here 
    } 
}; 

function doThat(setIds) { 
    // Do whatever here 
    // No need to return anything 
} 

dataservice.doThis([1, 2, 3]).then(doThat);