Javascript 从客户端中的服务器获取值

Javascript 从客户端中的服务器获取值,javascript,node.js,electron,Javascript,Node.js,Electron,我试图用Electron/nodejs从服务器返回一个字符串,但遇到了一些问题 我有一个名为handleHWCompare的函数,它有一个发送给它的类型和值。对于某些类型,我需要将值发送到服务器,服务器将处理并返回一个稍微修改的字符串,以匹配脚本中的某些特定情况 问题是,我不知道如何在函数中正确使用返回的数据 此函数有多种类型的返回,因为它用于多种目的。以下是我的功能: function handleHWCompare(type, server, client, doActions = true

我试图用Electron/nodejs从服务器返回一个字符串,但遇到了一些问题

我有一个名为handleHWCompare的函数,它有一个发送给它的类型和值。对于某些类型,我需要将值发送到服务器,服务器将处理并返回一个稍微修改的字符串,以匹配脚本中的某些特定情况

问题是,我不知道如何在函数中正确使用返回的数据

此函数有多种类型的返回,因为它用于多种目的。以下是我的功能:

function handleHWCompare(type, server, client, doActions = true) {

    difference = leven(server, client);

    if(difference <= 2) {
        if(doActions) {
            //do some actions
        }
        return true;
    } else {
        if(doActions) {
            //do some actions
        }
        return false;
    }

}
我理解这是一个问题,因为如果sync/async,但它实际上没有及时设置使用它的值,它将保持函数的旧值

我尝试将函数中的所有现有代码放在res.on
https.get
的一部分上,但没有成功,因为它破坏了
返回true
返回false

我尝试使用一个回调函数,该函数几乎可以正常工作,但我不知道如何使现有的
返回true
返回false
部分正常工作,因此它破坏了我的脚本(我已经试了几个小时了,所以我再也没有这方面的代码了)

做这么简单的事情似乎太难了,我不想为了这个重写我的整个应用程序结构。如何在此函数中发送此值并在客户端中检索修改后的版本


我知道等待和承诺之类的事情,但无论我如何努力,我都无法掌握如何使用它们的概念。

考虑到函数的作用域,我想您只需要调用函数。 但我需要更多关于代码结构的信息才能确定

if(type == "mobo" || type == "sku") {
  https.get('https://example.com/api/check_rules.php?type=' + type + '&value='+ client, (res) => {
    res.setEncoding('utf8');
    res.on('data', function (result) {
      console.log('altered: ' + result);
      handleHWCompare(type, server, result);
    });
  });
}

一种方法是创建一个
getAlteredClient
函数,该函数返回如下所示的值:

async function getAlteredClient(type, client) {
    return new Promise((resolve, reject) => {
        https.get('https://example.com/api/check_rules.php?type=' + type + '&value='+ client, (res) => {
            res.setEncoding('utf8');
            res.on('data', result => {
               resolve(result)
            });
        });
    });
}
您可能希望稍后处理可能的HTTP错误,并使用
reject
函数

现在,您可以使您的
handleHWCompare
函数异步,并使用
getAlteredClient
使用
wait

async function handleHWCompare(type, server, client, doActions = true) {
    if(type == "mobo" || type == "sku") {
        client = await getAlteredClient(type, client)
    }

    difference = leven(server, client);

    if(difference <= 2) {
        if(doActions) {
            //do some actions
        }
        return true;
    } else {
        if(doActions) {
            //do some actions
        }
        return false;
    }

}
异步函数handleHWCompare(类型、服务器、客户端、doActions=true){ 如果(类型==“mobo”| |类型==“sku”){ 客户端=等待getAlteredClient(类型,客户端) } 差异=leven(服务器、客户端);
如果(差异不太清楚你的意思。我想你想要这样的东西

function getResult(type, client, callback) {

    if (type == "mobo" || type == "sku") {
        https.get('https://example.com/api/check_rules.php?type=' + type + '&value='+ client, (res) => {
            res.setEncoding('utf8');
            res.on('data', function (result) {
                console.log('altered: ' + result);
                callback(result);
            });
        });
        console.log('variable: ' + client);
    } else {
        callback(client);
    }

}
只要使用

getResult(type, client, result => {
    console.log(result); // result is ready here
};
希望这有帮助

异步函数handleHWCompare(类型、服务器、客户端、doActions=true){ 如果(类型==“mobo”| |类型==“sku”){ https.get('https://pccheck.r1ss.com/api/check_rules.php?type=“+type+”&value=”+client(res)=>{ res.setEncoding('utf8'); res.on('数据',函数(结果){ 控制台日志(结果); return wait handlehwcareal(类型、服务器、结果、操作); }); }).on('错误',(e)=>{ 控制台错误(e); }); }否则{ return wait handlehwcareal(类型、服务器、客户端、操作); } } 函数handlehwcomareal(类型、服务器、客户端、doActions=true){ //放置您的代码
}这不能陷入循环中,因为它会不断地调用自己,因为
type
始终等于“mobo”或“sku”当从函数内部运行时?很抱歉,我无法理解它是如何循环的。if语句在函数外部,我看不出它之间有什么关联。该语句不在函数外部。因此,问题仍然是handleHWCompare的返回,如何在https.get请求内捕获该返回并将其返回到这是父函数?很抱歉,但您需要缩小错误范围。在不了解代码结构的情况下,很难像这样帮助您。在粘贴箱中,您有一些函数,如
unlockClient
和一些变量,如
difference=leven(服务器、客户端);
我不知道它们是如何工作的。请清理您的代码,只留下不起作用的代码,以便我们可以帮助您。getAlteredClient函数的返回部分缺少一个
);
。此外,我刚刚在第
行上得到一个错误
未捕获的语法错误:意外标识符
等待getAlteredClient(键入,客户机)
您确定在
handleHWCompare()之前添加了
async
关键字吗
函数声明?是的,我直接从您的回答中复制了所有代码。代码对我来说运行良好。您的节点版本是什么?我使用的是Node v8.11.1和Electron v1.8.7,我会再试一次。我刚刚开发了一个解决方案,可以在服务器上完成这项工作,但如果我早点得到它,这看起来会起作用。谢谢!@GrumpyCrouton谢谢你的理解!!
getResult(type, client, result => {
    console.log(result); // result is ready here
};