2014-02-07 89 views
0

我有一些使用匿名函數的javascript代碼。我懷疑,但不確定的是,這些函數的調用與代碼中的順序無關。JavaScript中的代碼順序

app_service.callbackOfSomeKind(function (result) { 
    console.log("result: 1"); 

}); 

app_service.AnotherCallback(function (result) { 
    console.log("result: 2"); 

}); 

如何確保結果2打印結果1後???我如何確保AnotherCallback甚至沒有被JS看到,直到在callbackOfSomeKind中的代碼運行?我正在考慮這樣做:

app_service.callbackOfSomeKind(function (result) { 
    console.log("result: 1"); 

    app_service.AnotherCallback(function (result) { 
     console.log("result: 2"); 

    }); 

}); 

但是有沒有更好的方法?

+4

是;使用承諾。 – SLaks

+0

它在這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise。但它是「實驗性」的。 – loveNoHate

回答

2

的承諾是巨大的,我建議尋找到他們,但通過使用命名的回調,而不是anons一種方法來簡化嵌套wihout大規模的重構:

function someCallback(result) { 
    console.log("result: 1"); 
    app_service.AnotherCallback(someOtherCallback); 
} 

function someOtherCallback(result) { 
    console.log("result: 2"); 
} 


app_service.callbackOfSomeKind(someCallback); 
以這種方式

,你仍然可以得到執行您需要的順序,但沒有嵌套anon回調,難以維護和調試。我想這是你的第一個和第二個例子之間的妥協,但降低了複雜性和關閉成本。