У меня есть событие, которое срабатывает при каждом получении пакета от устройства Bluetooth.Пакет поставляется в виде массива JSON и всегда содержит 10 объектов, аналогичных приведенным ниже.
var s1_data = [{"record":0,"sensor":1,"timestamp":26566,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":1,"sensor":1,"timestamp":26567,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":2,"sensor":1,"timestamp":26568,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":3,"sensor":1,"timestamp":26569,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":4,"sensor":1,"timestamp":26570,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":5,"sensor":1,"timestamp":26571,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":6,"sensor":1,"timestamp":26572,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":7,"sensor":1,"timestamp":26573,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":8,"sensor":1,"timestamp":26574,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}},
{"record":9,"sensor":1,"timestamp":26575,"date":{"day":7,"hour":10,"minute":45,"month":5,"second":38,"year":18}}]
Мне нужно поместить каждый отдельный объект в поток node.js, который используется другим потоком.
Может ли кто-нибудь привести пример того, как я могу перенаправить их в поток читаемых объектов на постоянной основе (или мне нужно использовать поток PassThrough)?Я не могу понять, как это сделать!
Отредактировано для добавления примера кода ниже.chunk.toString () завершается ошибкой, так как чанк не определен
var Readable = require('stream').Readable;
var util = require('util');
var through2 = require('through2');
var s1 = require('./sensor1.js');
var s2 = require('./sensor2.js');
var minLength = s1.length;
//console.log(s1);
var s1stream = new Readable({ objectMode: true });
var s2stream = new Readable({ objectMode: true });
s1stream._read = function () {
this.push();
};
s2stream._read = function () {
this.push();
};
if (s2.length < minLength){
minLength = s2.length;
}
var n1 = 0;
setInterval(function() {
if (n1++ < minLength) {
console.log(s1[n1].record);
s1stream.push(s1[n1]);
} else if (n1++ === minLength) {
s1stream.push(null);
}
}, 1000);
var n2 = 0;
setInterval(function() {
if (n2++ < minLength) {
s2stream.push(s2[n2]);
} else if (n2++ === minLength) {
s2stream.push(null);
}
}, 1000);
s1stream.pipe(through2.obj(function (chunk, enc, callback) {
this.push(chunk.toString())
callback()
})).pipe(process.stdout);
Правка ниже показывает рабочий код.Похоже, это было связано с тем, как я создавал read
функции
var Readable = require('stream').Readable;
var util = require('util');
var through2 = require('through2');
var Transform = require('stream').Transform;
var s1 = require('./sensor1.js');
var s2 = require('./sensor2.js');
var minLength = s1.length;
//console.log(s1);
var s1stream = new Readable({
objectMode: true,
read() {}
})
const s2stream = new Readable({
objectMode: true,
read() {}
})
if (s2.length < minLength){
minLength = s2.length;
}
var n1 = 0;
setInterval(function() {
if (n1 < minLength) {
s1stream.push(s1[n1]);
n1++;
} else if (n1 == minLength) {
s1stream.push(null);
}
}, 1000);
var n2 = 0;
setInterval(function() {
if (n2++ < minLength) {
s2stream.push(s2[n2]);
} else if (n2++ === minLength) {
s2stream.push(null);
}
}, 1000);
var jsonStream = through2.obj(function(file, encoding, cb) {
this.push(file.record.toString())
cb()
})
s1stream.pipe(jsonStream).pipe(process.stdout);