我正在Laravel中开发一个Web应用程序,它通过JSON将一个文章列表发送到在Node.js上运行的进程(我使用websocket库),这些项目必须为每个项目调用一个打印函数(我使用escpos)库)。
当我打印一两件物品时没有问题,一切正常。但是,当我发送3个或更多项目时,打印机打印第一个确定,但其余的则有问题。我想当我发送3件或更多件时,打印机速度太慢,无法结束作业。
这是我在Node.js中打印项目的代码的一部分:
for (var i = 0; i < msg.items.length; i++) {
for (var j = 0; j < msg.items[i].quantity; j++) {
print(msg.items[i]);
}
}
(注意我使用2循环,因为一个项目的数量可以是> 1,我必须为每个项目和数量打印1张票)
这是打印库的代码(不相关但我要澄清)
function print(item){
escpos.Image.load(__dirname + '/logo3.png', function(image){
printer
.raster(image)
.control('LF')
.style('b')
.size(2, 2)
.text(item.code)
.control('LF')
.control('LF')
.barcode(item.ean, "EAN8")
.cut();
});
我希望你能帮助我,提前谢谢你。
答案 0 :(得分:0)
我找到了问题的解决方案。我决定使用超时的异步请求等待打印机完成每项任务,以及promises。代码片段:
function asyncFunction (item, cb) {
setTimeout(() => {
print_product(item);
console.log("Print " + item.code);
cb();
}, 1200);
}
let requests = products.reduce((promiseChain, item) => {
return promiseChain.then(() => new Promise((resolve) => {
asyncFunction(item, resolve);
}));
}, Promise.resolve());