Невозможно установить переменную в функции, вызывающей ее из другой функции - PullRequest
0 голосов
/ 17 ноября 2018

В данный момент я запускаю файл js узла и получаю сообщение, подобное этому.

app.post('/', function (req, res) {
    var firstLine = req.body.firstLine;
    var secondLine = req.body.secondLine;
    var previewID = req.body.previewId;
    takeWebshot(firstLine)
    return res.end('<h1>Hello, Secure City World!</h1>');
});

когда я console.log firstLine установил в req.body.firstLine, допустим, что это «Hello». Итак firstLine = "Привет". Затем я передаю эту переменную в takeWebshot(firstLine). Когда я консоль журнала FLine в takeWebshot, я вижу «Привет».

    function takeWebshot(fLine) {
console.log(fLine);
        var options = {
          onLoadFinished: {
            fn: function() {
              document.getElementById("user_input").value=fLine;
              document.getElementById("second_user_input").value="AMAZON USERNAME";
              document.getElementById("preview_btn").click();
            }
          },
          takeShotOnCallback: true,
          captureSelector: '.fancybox-outer'
        };

        webshot('example.com/testy.html', './example.png', options, function(err) {
          if (err) return console.log(err);
          console.log('OK');
        });
      };

Вот моя проблема в этой строке:

document.getElementById("user_input").value=fLine;

fLine больше не читается. Я попытался передать fLine в функцию, вот так fn: function (fLine). fLine теперь равняется «успеху». Из моего ограниченного знания JS кажется, что функция fn: function () является многообещающим обратным вызовом в главном узле модуля узла. Цель мне нужна

document.getElementById("user_input").value=fLine; to equal firstLine that is being sent by the other function.

РЕДАКТИРОВАТЬ: webshot вызывает фантом JS, чтобы открыть URL без головы. Я пытаюсь передать переменную, чтобы она могла заполнить форму, когда она вызывает его, чтобы сделать снимок экрана. Вот почему у него есть документ.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

В документации для webshot упоминается, что сценарий будет сериализован перед передачей в Phantom

Обратите внимание, что сценарий будет сериализован, а затем передан в Phantom в виде текста, поэтому вся информация переменной области будет потеряна. Однако переменные из вызывающей стороны могут быть переданы в скрипт следующим образом:

Ср https://www.npmjs.com/package/webshot#phantom-callbacks

Так что вы, вероятно, должны следовать их инструкциям и иметь что-то вроде этого:

onLoadFinished: {
  fn: function() {
    document.getElementById("user_input").value=this.fLineSnapshot;
    document.getElementById("second_user_input").value="AMAZON USERNAME";
    document.getElementById("preview_btn").click();
  },
  context: {
    fLineSnapshot: fLine
  }
},
0 голосов
/ 17 ноября 2018

вы не можете передать fLine в fn: function(fLine), так как это функция обратного вызова onLoadFinished, область действия переменной недоступна внутри, вы можете попробовать fn: () => { document.getElementById("user_input").value=fLine; }, это может работать как функция жирной стрелки с разрешением доступа к использованию переменной снаружи функция.

...