[英]Node.js thermal printer issue in loop printing
我正在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();
});
希望您能幫到我,謝謝。
我找到了解決問題的辦法。 我決定使用帶有超時的異步請求來等待打印機完成每個任務以及承諾。 代碼片段:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.