2014-03-03 139 views
0

是一個函數:等待函數執行

function getItem(key) { 
    var item; 
    func(key, function(items) { 
     for (var key2 in items) { 
      if (key2 === key && items.hasOwnProperty(key2)) { 
       item = items[key2]; 
      } 
     } 
    }); 
    return item; 
} 

當我們調用它,響應我們得到了一個未定義。如何等待回調函數的執行,然後才返回結果?

回答

2

剛引進的回調作爲參數傳遞給你的函數:

function getItem(key, callback) { 
    func(key, function(items) { 
    for (var key2 in items) { 
     if (key2 === key && items.hasOwnProperty(key2)) { 
     callback(items[key2]); 
     } 
    } 
    }); 
} 

getItem('bob', function (key) { 
    console.log(key); 
}); 
+0

+1正確的方式來處理這種情況。 – Praveen

+0

然後如何正確地滿足條件:if(getItem('bob')&& getItem('count')=== 4){...} – user3374552

+0

我不認爲你可以使用這種方法。您可能不得不使用一些延遲對象。有很多體面的模塊可以幫助您。 – Andy

1

你不行。就這樣。因爲Javascript沒有辦法等待異步回調。

您可以重用回調的概念,返回自己的價值,而不是直接返回它

function getItem(key, callback) { 
    var item; 
    func(key, function(items) { 
    for (var key2 in items) { 
     if (key2 === key && items.hasOwnProperty(key2)) { 
     item = items[key2]; 
     } 
    } 

    callback(item); 
    }); 
} 

,然後用它getItem('key', function(item) { ... })

+2

你怎麼知道它是異步的?在OP的帖子中沒有什麼那種。 –

+1

如果它是同步,操作代碼應該可以工作:) –

+0

你不能保證它是同步的,那麼根據定義它是異步的(即使實際上它不是) – SergeS