【问题标题】:QZ tray printing to multiple printersQZ 托盘打印到多台打印机
【发布时间】:2017-10-06 20:50:26
【问题描述】:

我一直在尝试使用https://qz.io/wiki/2.0-Raw-Printing#promise-loop 此处提供的示例使用 QZ 托盘打印到多台打印机 但我收到一条错误消息TypeError: Cannot read property 'sendData' of null

我有 rsvp-3.1.0.min.js、sha-256.min.js 和 qz-tray.js。 我使用示例提供的完全相同的代码,但显然将打印机名称更改为我已安装的名称。

如果我尝试分别打印到每台打印机,一切正常(默认方式)

知道可能出了什么问题,或者我错过了图书馆或其他什么吗?

谢谢

这是 Safari 上的完整错误消息:

TypeError: Cannot read property 'sendData' of null
    at qz-tray.js:323
    at lib$rsvp$$internal$$initializePromise (rsvp-3.1.0.min.js:10)
    at new lib$rsvp$promise$$Promise (rsvp-3.1.0.min.js:10)
    at Object.promise (qz-tray.js:456)
    at Object.dataPromise (qz-tray.js:314)
    at Object.find (qz-tray.js:788)
    at link (test.html:388)
    at lib$rsvp$$internal$$tryCatch (rsvp-3.1.0.min.js:10)
    at lib$rsvp$$internal$$invokeCallback (rsvp-3.1.0.min.js:10)
    at rsvp-3.1.0.min.js:10

【问题讨论】:

    标签: javascript qz-tray


    【解决方案1】:

    所以我发现了问题,这是我自己的错误,我忘了启动 QZ 托盘,脚本运行良好,测试将 Pixel 作业发送到激光打印机,将 Raw 作业发送到热敏打印机。

    编辑:解决方案

    function promiseLoop() {
        var data = [
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 1 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 2 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 3 ^FS\n^XZ\n",
            "^XA\n^FO50,50^ADN,36,20^FDPRINT 4 ^FS\n^XZ\n"
        ];
        var configs = [
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" },
            { "printer": "ZDesigner LP2844-Z" }
        ];
        var chain = [];
    
        for(var i = 0; i < data.length; i++) {
            (function(i_) {
                //setup this chain link
                var link = function() {
                    return qz.printers.find(configs[i_].printer).then(function(found) {
                        return qz.print(qz.configs.create(found), [data[i_]]);
                    });
                };
    
                chain.push(link);
            })(i);
            //closure ensures this promise's concept of `i` doesn't change
        }
    
        //can be .connect or `Promise.resolve()`, etc
        var firstLink = new RSVP.Promise(function(r, e) { r(); });
    
        var lastLink = null;
        chain.reduce(function(sequence, link) {
            lastLink = sequence.then(link);
            return lastLink;
        }, firstLink);
    
        //this will be the very last link in the chain
        lastLink.catch(function(err) {
            console.error(err);
        });
    }
    //Always make sure you are establishing a connection before printing
    qz.websocket.connect().then(promiseLoop).catch(errorHandler);
    

    【讨论】:

    • 您能否提供用于解决问题的代码...例如qz.websocket.connect(...).
    • 我使用了与此处提供的完全相同的代码,qz.io/wiki/2.0-Raw-Printing#promise-loop
    • 谢谢,但是您的帖子说您忘记了“启动 qz 托盘”,并且承诺循环没有提到 qz.websocket.connect(...)。您还记得那是否是您缺少的组件吗?我问是因为其他人可能会发现这些信息很有用。
    • 您是留下第一个链接var firstLink = new RSVP.Promise(function(r, e) { r(); }); 还是将其更改为qz.websocket.connect?
    • 我没有对上面的脚本做任何改动,我只是在连接成功后调用了promiseLoop函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多