Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs-等待变量:回调_Javascript_Node.js_Callback - Fatal编程技术网

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文件回调余额。