множественный экземпляр узла фантом не отображает правую страницу - PullRequest
0 голосов
/ 28 августа 2018

Я использую фантом для сохранения PDF нескольких транзакций, но однажды я замечаю какую-то странную вещь, скажем, есть две страницы A и B, тогда я хочу записать ее как pdf, но когда A.pdf и B.pdf создано, они оба отображают страницу B. Это происходит только тогда, когда я звоню им одновременно.

Пример кода:

function testPhantom(i)
{
    var phantom = require('phantom');
    phantom.create()
    .then(function(ph){phInstance = ph; return ph.createPage();})
    .then(function(page){
        page.property('viewportSize', {width: "210mm", height: "297mm"});  
        page.property('paperSize', {format: 'A4', orientation: 'portrait', margin: '1cm'});
        pageInstance = page;
        if (i == 1)
        {
            return page.open('http://www.google.com/');
        }
        else if (i == 2)
        {
            return page.open('https://www.facebook.com/');
        }
    })
    .then(function(status){
        console.log(status);
        return pageInstance.render('test'+i+'.pdf');
    })
    .then(function(){
        // phInstance.exit();
    })
    .catch(function(error){
        console.log(error);
        // phInstance.exit();
    });
}

testPhantom(1);
testPhantom(2);

С этим кодом будет либо Google, либо оба Facebook.

Если я вызову выход из функции, предупреждение будет отображаться как

warn: exit() was called before waiting for commands to finish. Make sure you are not calling exit() prematurely

или ошибка как

Error: Error reading from stdin: Error: This socket has been ended by the other party

Как я могу иметь различный экземпляр фантома, чтобы они работали правильно

1 Ответ

0 голосов
/ 28 августа 2018

Я думаю, вы должны сделать phInstance и pageInstance локальной переменной. Как это:

var phInstance;
var pageInstance;
var phantom = require('phantom');
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...