如何避免如果在NodeJs中快点地狱,快递

时间:2018-02-27 09:01:01

标签: javascript node.js express

我正在Nodejs中创建一个项目并表示我有一个逻辑响应ajax调用,它通过其聚合框架查询<button type="submit" class="admin-link">Download Codes</button>数据库,然后处理如此获得的结果。

MongoDb查询

获得的结果
MongoDB

此查询的回调函数

  [ { _id: 'ALR', count: 7 },
  { _id: 'WTK', count: 3 },
  { _id: 'BWL', count: 9 },
  { _id: 'BAT', count: 9 } ]

看起来我正处于一种If Else地狱,这段代码按预期工作但我对此并不满意,如果有人能够以更好的方式给出一个做这个回调函数的暗示。

2 个答案:

答案 0 :(得分:0)

switch案例外,您无能为力。

但是你可以像这样剪掉一些代码:

检查错误if (err) return;时 代码块将停止执行。因此,您无需检查if (counts)。相反,只需继续编写代码。

示例:

function (err, counts) {
              if(err){
                console.log(err);
                return res.json({status:false, msg : err});
              }
              if(counts){ //remove this if. Not needed
                console.log(counts);
                for (var i = 0; i < counts.length; i++) {

变为

  function (err, counts) {
                  if(err){
                    console.log(err);
                    return res.json({status:false, msg : err});
                  }

                    console.log(counts);
                    for (var i = 0; i < counts.length; i++) 

在for循环中也可以这样做,也可以将嵌套语句和它们的父语句放在一起,如下所示:

for (var i = 0; i < counts.length; i++) {
    var type = counts[i]._id;
    var count = counts[i].count;
    if(type == "ALR" && count < 5){
        return res.json({status:false, msg : "Minimum 5 All-Rounders"});
    } 
    if(type == "BAT" && count < 6){
        return res.json({status:false, msg : "Minimum 6 Batsman"});
    } 
    if (type == "BWL" && count < 6){
        return res.json({status:false, msg : "Minimum 6 Bowlers"});
    }
    if(type == "WTK" && count < 3){
        return res.json({status:false, msg : "Minimum 3 Wicket Keepers"});
    } 
} 

答案 1 :(得分:-2)

简单。您可以使用switch case 而不是多个if else语句。