代码挑战
给出
给出了具有以下读取操作的工业协议
/ ** *从给定位置开始读取特定数量的字节的操作
并使用读取的有效负载执行提供的回调
@param start起始寄存器
@param长度要读取的字节数(重要:最大长度为10!)
@param回调回调接收Buffer类型的读取有效负载作为参数 * /
industrialProtocol.read(start, length, callback)
e.g. industrialProtocol.read(3, 1, callback) => callback(err, payload)
读取功能提供对使用此协议的任何设备的数据段的访问。
假定具有4096字节的数据段表示如下: Data segment 0 1个 2 3 4 …。 4096字节
实施
请实现一种算法,该算法将从设备读取多个值,并将其以最有效的方式提供给相应的回调函数。您建立的功能应该易于使用,例如在对感兴趣的寄存器进行定期轮询的情况下。我们认为读取功能是缓慢且昂贵的,因此请尝试将读取功能的调用量减至最少,并将多个读取聚合为更少的读取。
/ ** * *
* @param inputList List of values to read: [{3, 2, callbackA}, {4, 1,
callbackB}]
* [{start, length, callback}, ….]
*/
yourFunction(inputList)
Example aggregation:
inputList = [{3, 1, cb1}, {4, 1, cb2}]
➔ industrialProtocol.read(3, 1, cb1) & industrialProtocol.read(4, 1, cb2)
➔ Aggregation: industrialProtocol.read(3, 2) ➔ cb1(payload1) & cb2(payload2)
确保使用正确的有效负载调用每个回调。
我的汇总读取解决方案是
exports.getAggregateRead = (inputList) => {
// var inputList = [{start: 3, length: 1 }, { start: 4, length: 8}];
var startRegisterArray = inputList.map(input => {
return input.start;
});
var endRegisterArray = inputList.map(input => {
return input.start + input.length;
});
var aggregrateRead = {};
aggregrateRead.start = Math.min(...startRegisterArray);
aggregrateRead.length = Math.max(...endRegisterArray) - aggregrateRead.start;
return aggregrateRead;
}
但是,我对Node.js缓冲区不熟悉,也不知道如何继续进行下一步。任何线索都将有所帮助。
我已经没有通过代码挑战,所以这不是在作弊,而是为下一个做准备。