代码之家  ›  专栏  ›  技术社区  ›  GrumpyCrouton

从客户端的服务器获取值

  •  1
  • GrumpyCrouton  · 技术社区  · 6 年前

    我有一个名为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;
        }
    
    }
    

    我已经尝试了一些方法。

    我试过上面的函数:

    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);
                client = result;
            });
        });
        console.log('variable: ' + client);
    }
    

    我理解这是一个问题,因为如果sync/async,但它并没有及时设置使用它的值,它仍然是函数的旧值。

    我试着把函数中所有现有的代码放到恢复部分 https.get return true return false .

    我试着使用一个回调函数,但我不知道如何使现有的 返回false 部分工作,所以它破坏了我的脚本(我已经没有这个代码了,因为我已经尝试了几个小时了)。

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

    4 回复  |  直到 6 年前
        1
  •  1
  •   sreepurna    6 年前

    希望这有帮助。

    async function handleHWCompare(type, server, client, doActions = true) {
            if(type == "mobo" || type == "sku") {
              https.get('https://pccheck.r1ss.com/api/check_rules.php?type=' + type + '&value='+ client, (res) => {
                    res.setEncoding('utf8');
                    res.on('data', function (result) {
                        console.log(result);
                        return await handleHWCompareReal(type, server, result, doActions);
                    });
                }).on('error', (e) => {
                  console.error(e);
                });
            } else {
                return await handleHWCompareReal(type, server, client, doActions);
            }
    }
    
    function handleHWCompareReal(type, server, client, doActions = true) {
    //place your code
    }
        2
  •  0
  •   rafaelcastrocouto    6 年前

    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);
        });
      });
    }
    
        3
  •  0
  •   Pierre C.    6 年前

    一种方法是创建一个 getAlteredClient Promise 这样地:

    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)
                });
            });
        });
    }
    

    reject 功能

    现在你可以 handleHWCompare 功能 已更改客户端 使用 await

    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;
        }
    
    }
    

    手柄比较 ,因为它现在是一个异步函数 等待 then() .

        4
  •  0
  •   attempt0    6 年前

    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
    };