QZ лоток для печати на нескольких принтерах

Я пытался печатать на нескольких принтерах с помощью QZ-лотка, используя примеры, представленные здесь https://qz.io/wiki/2.0-Raw-Printing, но получаю сообщение об ошибке: 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

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);
Другие вопросы по тегам