无法在从另一个函数调用它的函数中设置变量
Unable to set variable in a function calling it from another function
我目前 运行 一个节点 js 文件,我正在收到一个 post 像这样的文件。
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 = "Hello"。
然后我将这个变量传递给 takeWebshot(firstLine)
。
当我在 takeWebshot 中控制日志 fLine 时,我可以看到 "Hello".
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 现在等于 "success"。以我对 JS 的有限了解,函数 fn: function() 似乎是主节点模块 webshot 中的承诺回调。目标是我需要
document.getElementById("user_input").value=fLine; to equal firstLine that is being sent by the other function.
编辑:webshot 正在调用一个 phantom js 打开一个 url headless。我正在尝试传递变量,以便它可以在调用它进行屏幕截图时填写表格。这就是为什么它有文档。
你不能将 fLine 传递给 fn: function(fLine)
因为它是 onLoadFinished 的回调函数,变量的范围在内部是不可访问的,你可以尝试 fn: () => {
document.getElementById("user_input").value=fLine;
}
这可能像粗箭头函数一样工作允许访问在函数外部使用变量。
webshot
的文档提到脚本在传递给 Phantom
之前将被序列化
Note that the script will be serialized and then passed to Phantom as text, so all variable scope information will be lost. However, variables from the caller can be passed into the script as follows:
比照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
}
},
我目前 运行 一个节点 js 文件,我正在收到一个 post 像这样的文件。
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 = "Hello"。
然后我将这个变量传递给 takeWebshot(firstLine)
。
当我在 takeWebshot 中控制日志 fLine 时,我可以看到 "Hello".
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 现在等于 "success"。以我对 JS 的有限了解,函数 fn: function() 似乎是主节点模块 webshot 中的承诺回调。目标是我需要
document.getElementById("user_input").value=fLine; to equal firstLine that is being sent by the other function.
编辑:webshot 正在调用一个 phantom js 打开一个 url headless。我正在尝试传递变量,以便它可以在调用它进行屏幕截图时填写表格。这就是为什么它有文档。
你不能将 fLine 传递给 fn: function(fLine)
因为它是 onLoadFinished 的回调函数,变量的范围在内部是不可访问的,你可以尝试 fn: () => {
document.getElementById("user_input").value=fLine;
}
这可能像粗箭头函数一样工作允许访问在函数外部使用变量。
webshot
的文档提到脚本在传递给 Phantom
Note that the script will be serialized and then passed to Phantom as text, so all variable scope information will be lost. However, variables from the caller can be passed into the script as follows:
比照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
}
},