为什么它始终将回调函数作为TRUE运行?

时间:2014-11-07 17:52:10

标签: javascript

有一个回调函数:

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 ......

2 个答案:

答案 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
}