Nodejs webstorm里面关于return返回空值的警告的一个解释

Nodejs webstorm里面关于return返回空值的警告的一个解释

Unnecessary return statements are those which return no value and occur just before the function would have “fallen through” to the bottom.

这是对第二个return的warn,不能这样用呢,程序如下:

exports.consumeAmountGetReward = function (user,callback) {
    var activity = QActivity.getValidActivity('consumeAmount'),
        config = QSetting.current(),
        localize = config.localize;

    if(!activity){
        callback(localize['20088']);
        return;
    }
    if(user.consumeAmountRemainCount <= 0){
        callback(localize['20076']);
        return;
    }else{
        user.consumeAmountRemainCount -= 1;
        user.consumeAmountCrystal -= activity.data.crystal;
        businese.UserManager.saveUser(user, function (err) {
            if(err){
                callback(err);
            }else{
                callback(null,outputConsumeAmountActivity(user,activity));
            }
        });
    }
};

5 回复

Node.js WebStorm 里面关于 return 返回空值的警告的一个解释

在使用 Node.js 和 WebStorm 开发时,你可能会遇到一些关于 return 的警告。这些警告通常提示你在某些情况下,return 语句返回的是空值(即没有明确的返回值)。这种情况通常出现在函数即将自然结束的时候。

示例代码

假设我们有一个函数 consumeAmountGetReward,它用于处理用户的消费奖励逻辑:

exports.consumeAmountGetReward = function (user, callback) {
    var activity = QActivity.getValidActivity('consumeAmount'),
        config = QSetting.current(),
        localize = config.localize;

    if (!activity) {
        callback(localize['20088']);
        return;
    }
    if (user.consumeAmountRemainCount <= 0) {
        callback(localize['20076']);
        return;
    } else {
        user.consumeAmountRemainCount -= 1;
        user.consumeAmountCrystal -= activity.data.crystal;
        businese.UserManager.saveUser(user, function (err) {
            if (err) {
                callback(err);
            } else {
                callback(null, outputConsumeAmountActivity(user, activity));
            }
        });
    }
};

解释

在这段代码中,WebStorm 可能会警告你第一个 return 语句是不必要的,因为它只是简单地结束了函数的执行,并没有返回任何值。具体来说,第一个 returnif (!activity) 条件满足时执行,此时函数已经通过 callback 调用了外部代码,因此不需要额外的 return 语句。

修改后的代码

你可以移除这些不必要的 return 语句以避免警告:

exports.consumeAmountGetReward = function (user, callback) {
    var activity = QActivity.getValidActivity('consumeAmount'),
        config = QSetting.current(),
        localize = config.localize;

    if (!activity) {
        callback(localize['20088']);
    }
    if (user.consumeAmountRemainCount <= 0) {
        callback(localize['20076']);
    } else {
        user.consumeAmountRemainCount -= 1;
        user.consumeAmountCrystal -= activity.data.crystal;
        businese.UserManager.saveUser(user, function (err) {
            if (err) {
                callback(err);
            } else {
                callback(null, outputConsumeAmountActivity(user, activity));
            }
        });
    }
};

总结

在编写 Node.js 代码时,确保你的 return 语句是有意义的。如果函数的执行已经通过其他方式(如 callback)完成,那么 return 语句可能是多余的。通过移除这些不必要的 return 语句,可以使代码更简洁,同时也可以避免开发工具中的警告。


因为你的那个被警告的 return 即使不加,后面也不会执行了。webstorm 很智能,就告诉你这个 return 不必要。

你把那个 return 下面的 else block 给去掉的话,提示也就消失了。

ok,3!

在WebStorm中,当你在一个函数中使用return语句并且不返回任何值时(即return;),IDE会发出警告,因为它认为这是一个不必要的return语句。这通常是因为在该位置之后没有其他代码执行,函数会自动返回undefined

在你的代码示例中,第一个return语句后面没有其他代码,因此可以被认为是不必要的。第二个return语句后面有其他代码执行,因此它不是不必要的。你可以修改代码以消除这些警告:

exports.consumeAmountGetReward = function (user, callback) {
    var activity = QActivity.getValidActivity('consumeAmount'),
        config = QSetting.current(),
        localize = config.localize;

    if (!activity) {
        callback(localize['20088']);
        return; // 这个return是必要的
    }

    if (user.consumeAmountRemainCount <= 0) {
        callback(localize['20076']);
        return; // 这个return也是必要的
    }

    user.consumeAmountRemainCount -= 1;
    user.consumeAmountCrystal -= activity.data.crystal;

    business.UserManager.saveUser(user, function (err) {
        if (err) {
            callback(err);
        } else {
            callback(null, outputConsumeAmountActivity(user, activity));
        }
    });
};

在这个修改后的版本中,所有的return语句都是必要的,因为它们在某些条件下终止了函数的执行。WebStorm应该不会再对这些return语句发出警告。

回到顶部