有一个回调函数:
function _isBanned(idUser, idFriend, callback){
redis.sismember("user.friend_tmp:" + idFriend, idUser, function(err, friends){
console.log(friends);
if(friends == 0) { return callback(true); }
callback(false);
});
}
函数调用:
isBanned(data.from, data.to, function() {
// BODY
}
尽管console.log (friends);
等于 1 ,但执行该功能,并将控制转移到// BODY ......
答案 0 :(得分:0)
无论if
测试的价值如何,您都在呼叫您的回叫。您在一个案例中传递true
,在另一个案例中传递false
,但在两种情况下都调用回调。然后,在回调中你不会注意传递给回调的任何参数,因此在这两种情况下你没有得到不同的行为。
也许你的代码应该是这样的:
isBanned(data.from, data.to, function(banned) {
if (banned) {
// one action here
} else {
// different action here
}
}
答案 1 :(得分:0)
callback(false);
仍以false
为参数调用回调函数。如果您不想拨打回叫,只需省略此行即可。或者你可以在里面处理它(例如,如果你想确保你的功能到达目的地),例如:
isBanned(data.from, data.to, function(arg) {
if (arg === false) {
alert('hey, the callback function is called, but the argument is false');
return;
}
// BODY
}