我正在使用'二进制解析器' node.js中的NPM模块,我正在尝试使用自己的断言'功能而不是内联提供。我不知道问题是否是二元解析器的问题。或者是我无知在javascript中调用函数和/或函数引用。
这里的代码有效,但不是我想要的:
var Parser = require('binary-parser').Parser;
var data = new Buffer([0x23, 0x36, 0x74, 0x0e, 0x01, 0xff, 0xff]);
function range (min, val, max) {
return (min <= val && val <= max);
}
var dataParser = new Parser()
.endianess('little')
.uint8('inside_humidity', {assert: function(x){return(x <= 100);}})
.uint16('barometer', {assert: function(x){return(20000 <= x && x <= 32500);},
formatter: function(x) {return x/1000;}})
.uint16('wind_direction', {assert: function(x){return(x <= 360);}})
.uint16('crc');
console.log(dataParser.parse(data));
我想打电话给我自己的&#39;范围&#39;功能如下:
.uint16('barometer',
{assert: range(20000, x, 32500),
formatter: function(x) {return x/1000;}})
但我明白了:
ReferenceError: x is not defined
所以我试过了:
assert: function(x){range(20000, x, 325000)}
和
{assert: function(x){range.bind(this, 20000, x, 32500)},
并获得:
ReferenceError: range is not defined
有可能做我想做的事吗?
答案 0 :(得分:2)
您需要使用闭包:
function range(min, max) {
return function(x) {
return min <= val && val <= max;
};
}
你可以写
…
.uint8('inside_humidity', {assert: range(-Infinity, 100)})
.uint16('barometer', {assert: range(20000, 32500), formatter: function(x) {return x/1000;}})
.uint16('wind_direction', {assert: range(-Infinity, 360)})
…
答案 1 :(得分:0)
你有没有尝试过:
.uint16('barometer', {assert: function(x){return range(20000, x, 32500);},
HTH