Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有深嵌套的JS闭包_Javascript_Node.js_Selenium Webdriver_Webdriver - Fatal编程技术网

Javascript 具有深嵌套的JS闭包

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;

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;
    });
  }
});

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可能是原因。我怎样才能修好它?谢谢