return关键字的行为很奇怪

时间:2018-09-30 10:43:58

标签: javascript node.js electron

我正在使用JS(Electron,Node.js)中的项目进行工作,该项目需要检查Windows注册表中是否存在注册表项。 这是我的代码:

function IsSettedUp() {
regedit.list('HKCU\\SOFTWARE')
    .on('data', function (entry) {
        //Returns Keys
        console.log(entry.data.keys)

        //Checks if "WinXSoft" appears in the entry.data.keys array
        var key = $.inArray("WinXSoft", entry.data.keys)

        console.log(key)

        //Returns false if WinXSoft wasn't found
        if (key == -1) {

            return false
        }
        //Returns true if WinXSoft was found
        else {
            return true
        }
    })

    }
    //Should be true or false according to the WinXSoft key
    var z = IsSettedUp();
    console.log(z)

当我创建密钥并运行代码时,这是输出:

console.log(entry.data.keys)输出Array(42)。(预期)

console.log(key)输出13(预期)

console.log(z)输出undefined(???,应该为真)

是的,你们知道我该怎么解决吗?

4 个答案:

答案 0 :(得分:1)

尝试从on函数中返回值

function IsSettedUp() {
     var result = false;
     regedit.list('HKCU\\SOFTWARE').on('data', function (entry) {
        //Returns Keys
        console.log(entry.data.keys)

        //Checks if "WinXSoft" appears in the entry.data.keys array
        var key = $.inArray("WinXSoft", entry.data.keys)

        console.log(key)

        //Returns false if WinXSoft wasn't found
        if (key == -1) {

            result = true;
        }
        //Returns true if WinXSoft was found
        else {
            result = false;
        }
    });
    return result;
 }

答案 1 :(得分:0)

这是因为z是IsSettedUp return的值,该值不存在,因此未定义。

true是提供给on函数的回调的返回值。

function IsSettedUp() {
regedit.list('HKCU\\SOFTWARE')
    .on('data', function (entry) {
        //Returns Keys
        console.log(entry.data.keys)

        //Checks if "WinXSoft" appears in the entry.data.keys array
        var key = $.inArray("WinXSoft", entry.data.keys)

        console.log(key)

        //Returns false if WinXSoft wasn't found
        if (key == -1) {

            return false
        }
        //Returns true if WinXSoft was found
        else {
            return true
        }
    })
    return 'test' // ADD THIS RETURN
    }
    //Should be true or false according to the WinXSoft key
    var z = IsSettedUp();
    console.log(z)

尝试这段经过编辑的代码,看看z的值现在出来了,在函数的末尾添加了一行

答案 2 :(得分:0)

function (entry) {内部返回true或false。 function IsSettedUp() {之外没有返回任何内容,因此返回值为默认值undefined。格式化代码可以使函数作用域清晰明了。

答案 3 :(得分:0)

我没有找到解决此问题的方法,所以我决定给我们另一个可以正常工作的库。