Javascript QZ托盘打印到多台打印机

Javascript QZ托盘打印到多台打印机,javascript,qz-tray,Javascript,Qz Tray,我一直在尝试使用这里提供的示例使用QZ托盘打印到多台打印机 但是我得到一个错误,说TypeError:cannotread属性'sendData'为null 我有rsvp-3.1.0.min.js,sha-256.min.js和qz-tray.js。 我使用的代码与示例中提供的代码完全相同,但显然已将打印机名称更改为我已安装的名称 如果我尝试分别在每台打印机上打印,一切正常(默认方式) 你知道什么地方出了问题,或者我错过了图书馆什么的吗 多谢各位 以下是Safari上的完整错误消息: TypeE

我一直在尝试使用这里提供的示例使用QZ托盘打印到多台打印机 但是我得到一个错误,说
TypeError:cannotread属性'sendData'为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

所以我发现了问题,这是我自己的错误,我忘记启动QZ托盘,脚本工作正常,测试了将像素作业发送到激光打印机,将原始作业发送到热敏打印机

编辑:解决方案

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);
函数promiseLoop(){
风险值数据=[
“^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
];
变量配置=[
{“打印机”:“ZDesigner LP2844-Z”},
{“打印机”:“ZDesigner LP2844-Z”},
{“打印机”:“ZDesigner LP2844-Z”},
{“打印机”:“ZDesigner LP2844-Z”}
];
var链=[];
对于(变量i=0;i
您能否提供用于解决此问题的代码。。。e、 g.
qz.websocket.connect(…)
。我使用了这里提供的完全相同的代码,谢谢,但是你的帖子说你忘了“启动qz托盘”,承诺循环没有提到
qz.websocket.connect(…)
。你还记得那是不是你丢失的部件吗?我这样问是因为其他人可能会发现这些信息很有用。您是否留下了第一个链接
var firstLink=new RSVP.Promise(函数(r,e){r();})
或者您是否将其更改为
qz.websocket.connect
?我没有更改上面的脚本中的任何内容,我只是在成功连接后调用了
promiseLoop
函数