我創建了一個返回布爾值的Javascript函數。函數中的一行代碼調用REST調用。當我編寫代碼時,我沒有意識到這個調用將會是異步的。所以,基本上,該方法始終返回「假」,當我做這樣的事情:如何正確使用一個具有異步調用的Javascript函數?
if(isDataValid()) ...
我可以在調用函數成功函數移動的動作,但我試圖創建一個可重用的方法。我正在使用jQuery和Everest。我還沒有學到任何有關Promise的知識,而且我對回調編程還很陌生。
這裏的歸結我的方法的版本:
function isDataValid(){
// Read data from Local Storage
// Create object from data
// Flag variable to capture result
var isValid = null;
restClient
.read('/my/url', model)
.done(function(response)
{
// 'Good' response, set flag to true
isValid = true;
})
.fail(function(response)
{
// 'Bad' response, set flag to false
isValid = false;
});
return isValid;
}
我應該怎麼做一個異步調用和返回真/假?
你根本不行。如果堆棧的任何部分都是異步的,那麼所有的東西都必須寫入異步(通過回調或承諾)。您不能調用該函數,並期望能夠同步獲得響應。 –
創建您的「可重用方法」,並從成功函數中傳遞'invalid'作爲參數。 – jdigital