Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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中扩展函数变量的范围?_Javascript_Protractor - Fatal编程技术网

如何在javascript中扩展函数变量的范围?

如何在javascript中扩展函数变量的范围?,javascript,protractor,Javascript,Protractor,我在量角器中有一个基本函数,写为: this.getCurrentUrl = function () { browser.getCurrentUrl().then(function(url){ console.log('url : '+url); }); }; 现在有一种方法可以访问内部函数作用域之外的“url”,因为我需要将此值返回给调用此值的其他函数。我需要获取该值并从外部返回它,然后(函数(url){…}url将异步获取,因此您不能只分配它。您可能想给它一

我在量角器中有一个基本函数,写为:

this.getCurrentUrl = function () {
    browser.getCurrentUrl().then(function(url){
        console.log('url : '+url);
    });
};

现在有一种方法可以访问内部函数作用域之外的“url”,因为我需要将此值返回给调用此值的其他函数。我需要获取该值并从
外部返回它,然后(函数(url){…}

url将异步获取,因此您不能只分配它。您可能想给它一个回调

function handleUrl(url) {
  // here is where you do something with the url
}

// let your callback be called
this.getCurrentUrl = function(fn) {
  browser.getCurrentUrl().then( function (url) {
    fn(url);
  }) 
}

// make the call with your handler
this.getCurrentUrl(handleUrl);
另一种方法是让你的函数返回一个“容器”,然后再膨胀。然后你可以检查你的容器。因为行为是异步的,你不知道它什么时候准备好,所以你可以在一个时间间隔或其他时间检查它

// return a container object
this.getCurrentUrl = function() {
    var urlContainer = {};
    browser.getCurrentUrl().then( function (url) {
      urlContainer.url = url;
    });
    return urlContainer;
}

var urlContainer = this.getCurrentUrl(); // starts off as an empty object
urlContainer.url // undefined

// then shortly in the future

urlContainer.url // has some url
然而,第三种方法是恢复关闭

this.getCurrentUrl = function() {
   var urlValue;
   browser.getCurrentUrl().then(function(url) {
      urlValue = url;
   });
   return function() {
      return urlValue;
   }
}

var getUrl = this.getCurrentUrl(); 
getUrl(); // initially, returns undefined;

// keep trying. then shortly in the future...
getUrl(); // now has the url

我严重怀疑真正的问题是重复或“从异步函数返回值”…请确认您的示例中没有异步代码(最好更新代码以删除混淆的
。然后(…)
(如果是这样的话)量角器本身是异步的,所以它是indeed的。基本上,如果它进行异步调用,则无法从该函数获取返回值。请查看上面的链接,使调用该函数的函数预期异步响应。因此,我应该调用getUrl()这里?您面临的问题是,获取url的操作是异步的。因此,您不能简单地说
var url=getCurrentUrl()
。您必须使用回调函数并使回调函数对url执行某些操作,或者使用第二或第三种方法,这需要在某个时间间隔内测试结果,直到得到一个值。