首页 > 解决方案 > 如何在节点串行端口库中访问此函数之外的变量?

问题描述

我希望你很好,有没有办法访问函数之外的值?我的代码是

const SerialPort = require("serialport");
const Readline = require("@serialport/parser-readline");
const port = new SerialPort("COM4");

const parser = port.pipe(new Readline({ delimiter: "\r\n" }));

parser.on("data", function(chunk) {
    valrec = chunk.toString();
    console.log(valrec);
    v = valrec.split(" ");
    var r = v[3];
    var l = v[2];
});

函数内部一切正常,但在函数外部我无法访问任何变量rl. 所以请你能帮我在这个函数之外访问我的变量,以便在我的代码中使用它们。

或者这个版本的代码让我至少可以访问变量“valrec”

const SerialPort = require('serialport')
const Readline = require('@serialport/parser-readline')
const port = new SerialPort('COM4')

const parser = port.pipe(new Readline({ delimiter: '\r\n' }))

var valrec;
var doStuff = function (param) {
    return console.log(param);
};


parser.on('data', function (chunk) {
    valrec = chunk.toString();
    doStuff(valrec);
});

非常感谢。

标签: javascriptnode-serialport

解决方案


如果您在函数外部定义rl那么您可以从函数外部访问它们。但请注意,它可能不会像您预期的那样进行。由于函数是异步的,它不会阻塞代码的执行,这意味着函数之后的代码实际上会在函数之前运行。

const SerialPort = require("serialport");
const Readline = require("@serialport/parser-readline");
const port = new SerialPort("COM4");

const parser = port.pipe(new Readline({ delimiter: "\r\n" }));

// we can define these outside
var r, l;
parser.on("data", function(chunk) {
    valrec = chunk.toString();
    console.log(valrec);
    v = valrec.split(" ");
    // no more "var"s needed here
    r = v[3];
    l = v[2];
});

// THIS WILL NOT WORK
console.log(`r is ${r} and l is ${l}`);

parser.on("end", function() {
    // this will work because we know the data has already been received
    console.log(`r is ${r} and l is ${l}`);
});

推荐阅读