2017-08-29 70 views
-1

我知道使用回調將意味着該函數將等待返回結果之前返回結果,但如果我想執行進一步的代碼呢?Nodejs - 等待一個變量:回調

下面是我正在嘗試執行的一個示例。 isAvailable檢查是否有人在其賬戶中有足夠的餘額,並且如果他們可以提取資金則返回true。

我的問題是這個函數異步執行,所以它不會等待在執行if語句之前返回餘額。我應該如何將if語句分隔到另一個函數並使用回調來等待餘額?如果是這樣,我該怎麼做?

function isAvailable(user, withdrawal, callback) { 
    var balance = getBalance(user, callback); 
    if (withdrawal > balance) { 
    callback(false); 
    } else if (withdrawal < balance) { 
    callback(true); 
    } 
} 
+0

*「我的問題是,這個函數異步執行,因此不會等待之前要返回的平衡,如果執行的語句」 *我有一個偷偷摸摸的懷疑,getBalance不退縮平衡期間。 X/Y問題。 –

+0

getBalance經過測試,它的工作原理:) – Sprout

+0

**證明它。** :)它不可能返回一個當它返回時不存在的值。 –

回答

4

據我所知,使用回調將意味着功能會等到一個結果已經返回結果

號作爲異步意味着他們返回(無)之前已經返回,但稍後調用結果的回調函數。

在你的榜樣,你會得到balance不作爲getBalance的返回值,但作爲參數調用回調函數,你應該通過作爲第二個參數:

getBalance(user, function(balance) { 
    … 
}); 

內在那裏,你會放在進一步代碼執行:

function isAvailable(user, withdrawal, callback) { 
    getBalance(user, function(balance) { 
     if (withdrawal > balance) { 
      callback(false); 
     } else if (withdrawal < balance) { 
      callback(true); 
     } else { // if (withdrawal == balance) 
      callback(null); // don't forget this 
     } 
    }); 
} 
+0

啊對,謝謝。我已經應用了您編寫的代碼,但現在它只返回null。任何想法爲什麼? – Sprout

+0

@Sprout你是什麼意思的「回報」?回調函數可能用'null'調用,'isAvailable'函數總是返回'undefined'(不是'null')。你怎麼叫它? – Bergi

+0

調用isAvailable時,回調函數返回null。我使用用戶,金額和函數調用它,但回調爲空。我以爲回撥null是一個安全網? – Sprout