javascript - 如何在节点串行端口库中访问此函数之外的变量?
问题描述
我希望你很好,有没有办法访问函数之外的值?我的代码是
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];
});
函数内部一切正常,但在函数外部我无法访问任何变量r
或l
. 所以请你能帮我在这个函数之外访问我的变量,以便在我的代码中使用它们。
或者这个版本的代码让我至少可以访问变量“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);
});
非常感谢。
解决方案
如果您在函数外部定义r
,l
那么您可以从函数外部访问它们。但请注意,它可能不会像您预期的那样进行。由于函数是异步的,它不会阻塞代码的执行,这意味着函数之后的代码实际上会在函数之前运行。
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}`);
});
推荐阅读
- numpy - pyqgis:从列表中创建多层(自动)
- c++ - 尝试运行 CusolverSSgels 测试用例,但它不起作用
- flutter - Flutter Https 未处理异常:参数无效
- magento2 - 状态码:安装 Magento-2 后出现 500 错误。我无法查看我的主页,也无法登录到后端
- lua - 如何在路由请求之前从 haproxy 中的 lua 发送 https 请求?
- data-structures - 展开树中的有序继任者和前任者
- reactjs - 如何让 KeycloakProvider 包装 next-redux-wrapper?
- spring-jdbc - 使用带参数的 SET_JSON 时,NamedParameterJdbcTemplate 语法错误
- reactjs - 托管在通过 Azure Front Door 访问的存储帐户上的静态网站未正确加载
- javascript - Electron - 自动更新程序:有没有办法只安装更新的功能而不是重新安装整个应用程序