循环打印中的Node.js热敏打印机问题

时间:2017-03-02 16:00:18

标签: node.js async.js

我正在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();

});

我希望你能帮助我,提前谢谢你。

1 个答案:

答案 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());