如何在Javascript中提取包含return语句的通用逻辑?

如何在Javascript中提取包含return语句的通用逻辑?,javascript,refactoring,Javascript,Refactoring,这是我的密码: function function1() { var ids = GetIds(); // predefined function if (ids.length === 0) { alert("Please select at least one item to procees."); return; } ... } function function2() { var ids = GetIds(); /

这是我的密码:

function function1() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}

function function2() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}

function function3() {
    var ids = GetIds(); // predefined function
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

    ...
}
如何提取公共部分?如何重新考虑代码?return语句很难处理。是否有任何模式与此代码相关

提前谢谢

    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }

你不能。您唯一能做的就是将
alert()
移动到
GetIds()
。但是,在这种情况下,函数名会有点混乱

var ids = GetIds();
if(!ids) return;
或者你可以这样改变它:

GetIds(function(ids) {

});
function GetIds(callback) {
    var ids = ....;
    if(!ids) alert('...');
    else callback(ids);
}
然后,您的
GetIds
函数将如下所示:

GetIds(function(ids) {

});
function GetIds(callback) {
    var ids = ....;
    if(!ids) alert('...');
    else callback(ids);
}
你可以试试:

function checkId(ids) {
    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return false;
    }
    return true;
}

function function1() {
    var ids = GetIds();
    if (!checkId(ids)) return;

    // More code here
} 

这是一个很好的适合的

那么

function function1(ids) {
  // ...
}
function1 = decorateGetId(function1);
或者我的偏好,因为函数语句对提升做了奇怪的事情

var function2 = decorateGetId(function (ids) {
  // function 2 body ...
});

创建一个包含公共部分的函数,并调用该函数代替公共部分。您无法提取“return”语句,因为将其移动到其他位置将意味着它无法在其所在的位置执行其工作?但这三个函数都有完全相同的函数体。为什么同一个身体有三个功能。。。。过了一会儿:啊,这些点,我明白了<代码>:)但是回调函数中的return语句仍然将工作流返回到主函数。是的,在该版本中,您应该将所有代码放在回调函数中原始的
return
之后。如果没有
if(无论什么)返回,调用函数不可能从另一个函数返回在调用函数中。为什么不将getID移到checkID中?