多个if,else if语句中的回调地狱

Tam*_*zuk 3 javascript node.js

我有数据回调参数的功能.该数据与许多属性的对象,我要验证这些.我写了多个if,else if语句来做,但对我来说似乎太恶心了.

function(data, callback) {

 if (data.a != 'x') {
   logger.log(...);
   return callback({status: false, code: 'x'});
 } else if (data.b != 'y') {
   logger.log(...);
   return callback({status: false, code: 'y'});
 } else if (data.c != 'z') {
   logger.log(...);
   return callback({status: false, code: 'z'});
 } else if (data.d != 'w') {
   logger.log(...);
   return callback({status: false, code: 'w'});
 }

 //... logic ...
 return callback({status: true});
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是合适的方式.

geo*_*org 6

一种方法是将验证分解为单独的函数:

function failureCode(data) {
    if (data.a != 'x')
        return 'x';
    if (data.b != 'y')
        return 'y';
    if (data.c != 'z')
        return 'z';
}

function (data, callback) {
    var code = failureCode(data);
    if (code) {
        logger.log(...);
        return callback({status: false, code: code});
    }

    //... logic ...
}
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记return从"失败"分支.