Javascript Nodejs-等待变量:回调
我理解使用回调意味着函数将在返回结果之前等待结果返回,但是如果我想执行进一步的代码呢 下面是我试图执行的一个示例Javascript Nodejs-等待变量:回调,javascript,node.js,callback,Javascript,Node.js,Callback,我理解使用回调意味着函数将在返回结果之前等待结果返回,但是如果我想执行进一步的代码呢 下面是我试图执行的一个示例isAvailable检查某人的帐户中是否有足够的余额,如果可以取款,则返回true 我的问题是这个函数是异步执行的,所以它不会在执行if语句之前等待余额的返回。我是否应该将if语句与另一个函数分开,并使用回调来等待余额?如果是,我会怎样做 function isAvailable(user, withdrawal, callback) { var balance = getBal
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);
}
}
函数可用(用户、撤回、回调){
var balance=getBalance(用户,回调);
如果(取款>余额){
回调(假);
}否则如果(提款<余额){
回调(true);
}
}
我理解使用回调意味着函数将在返回结果之前等待结果返回
不,异步意味着它们立即返回(不返回任何内容),但稍后调用回调函数并返回结果
在您的示例中,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
}
});
}
函数可用(用户、撤回、回调){
getBalance(用户、函数(平衡){
如果(取款>余额){
回调(假);
}否则如果(提款<余额){
回调(true);
}else{//if(提款==余额)
回调(null);//别忘了这个
}
});
}
“我的问题是,这个函数是异步执行的,因此它不会在执行if语句之前等待余额返回。”我暗自怀疑getBalance没有返回余额周期。X/Y问题。getBalance经过尝试和测试,有效:)验证:)它不可能返回一个返回时不存在的值。为什么不能…?因为它会立即返回。它不能“等待”值的存在,这在javascript中是不可能在异步函数(您的函数不是)之外实现的。啊,对了,谢谢。我已经应用了您编写的代码,但现在它只返回null。知道为什么吗?@Sprout你说的“回报”是什么意思?回调函数可以用null
调用,isAvailable
函数总是返回未定义的(而不是null
)。您是如何调用它的?调用isAvailable时回调返回null。我使用user、amount和函数调用它,但它回调null。我认为回调null是一个安全网?这意味着取款
既不大于也不小于余额
。我不知道getBalance
实际上做了什么,也不知道您调用它时使用了什么值,回调中的代码应该是您的业务逻辑,只有您可以决定它是否正确。取款是120,余额是100,所以情况并非如此。getBalance将从json文件回调余额。