Javascript 具有深嵌套的JS闭包
NPM模块的代码如下:Javascript 具有深嵌套的JS闭包,javascript,node.js,selenium-webdriver,webdriver,Javascript,Node.js,Selenium Webdriver,Webdriver,NPM模块的代码如下: var actions = {}; var methods = ['POST', 'GET', 'PATCH', 'DELETE']; methods.forEach(function(method) { actions['mock' + method] = function(browser, url, response) { browser.execute(function() { result[method][url] = response;
var actions = {};
var methods = ['POST', 'GET', 'PATCH', 'DELETE'];
methods.forEach(function(method) {
actions['mock' + method] = function(browser, url, response) {
browser.execute(function() {
result[method][url] = response;
});
}
});
module.exports = actions;
我想要4种方法:mockPOST、mockGET、mockDELETE、mockPATCH。每个方法只需执行browser。使用回调函数执行,并将响应
放入相应的结果
字段-结果['POST']
放入模拟帖子
中,依此类推。但当我执行
utils.mockPOST(browser, 'auth', {"result": "OK"});
I get方法未定义
错误。我该怎么办?谢谢 正如我看到的,您正在为node.js使用selenium或webdriver。这让事情变得有点棘手。不能在浏览器中使用闭包。请执行
函数,原因是它根本不在那里运行。Webdriver将函数转换为字符串,将其传输到浏览器,并将eval
浏览器中的该字符串。nodejs闭包不会传输到浏览器,只会将函数代码作为字符串传输
我假设结果
对象已经在浏览器中全局定义
那么你能做些什么呢?我始终建议不要将函数文本放在浏览器中。执行和浏览器。执行同步,因为它们容易混淆。您可以将一个字符串放在那里,它将被计算。请尝试以下操作:
methods.forEach(function(method) {
actions['mock' + method] = function(browser, url, response) {
var browserAction = "result[" + JSON.stringify(method) + "]" +
"[" + JSON.stringify(url) + "] = " +
JSON.stringify(response) + ";";
browser.execute(browserAction);
};
});
result
未定义。result不是原因,但browser.execute可能是原因。我怎样才能修好它?谢谢