2017-08-29 338 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