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