2015-05-23 29 views
1

以下代碼是控制器的一部分,它切換帖子的「喜歡」狀態。if if else與我想要的完全相反

它的工作原理是這樣的:

  1. 首先它看起來對後用戶的任何喜好。
  2. 如果不存在,則保存狀態。
  3. 如果存在,「刪除」現有的狀態。

下面是代碼爲:

// api/posts 
exports.postLikes = function(req,res){ 
    var like = new Like({ 
     postId: req.params.postId, 
     user: req.user._id 
    }); 
    Like.find() 
    .and([ 
     {user:req.user._id}, 
     {postId:req.params.postId} 
    ]) // check for existing likes 
    .exec(function(err, result){ 
     if(!result){ // if there is no result 
      like.save(function(err){ 
       if(err){res.send(err);} 
       Post.findById(req.params.postId, function(err,post){ 
        if(err) return res.send(err); 
        post.likeId.push(like); 
        post.save(function(err){ 
         if(err) return res.send(err); 
         res.json({status:'done'}) 
        }); 
       }); 
      }); 
     }else{ //if there is result 
      res.json({status:'deleted'}) // just says deleted for now 
     }; 
    }); 
}; 

但是,它返回{status:'deleted'}時,有沒有結果,並增加了額外的喜好時,已經是一個結果。存儲在MongoDB中

{ _id: 555f4ee2f0ea4f8004690ba5, 
    postId: 555e649b3e5e24f0200f0f16, 
    user: 555e1c9fd5ec350421ec7cfa, 
    __v: 0, 
    created: Sat May 23 2015 00:44:34 GMT+0900} 

,如果它不存在,它

結果返回類似,它返回

[] 

我改變了我的代碼,以用於測試目的的工作更簡單

if(result != null){ 
    res.send(result + "deleted") 
}else{ 
    res.send(result + "added") 
}; 

現在都說結果+'刪除'

+0

這似乎不必要的複雜。如果所有這一切都是在切換帖子的狀態,那麼你應該只需要一個'if'' then''else'。 –

+1

如果沒有給出「結果」評估爲零?例如,「找不到結果」這樣的字符串確實是* not *。 – usr2564301

+1

在這兩種情況下'result'的值是多少? –

回答

4

docs(我的重點):

所有值都truthy,除非它們被定義爲falsy(即,除了 爲,,「」undefinedNaN)。

空數組([])不是上面的列表上,所以它的truthy

您可能想要返回null