2016-05-20 9 views
1

私は分度器での基本的な機能は、書かれていますこれです。値を取得して外部から返す必要があります。then(function(url){...}javascriptで関数変数のスコープを拡張する方法は?</p> <pre><code>this.getCurrentUrl = function() { browser.getCurrentUrl().then(function(url){ console.log('url : '+url); }); }; </code></pre> <p>は、今私は内側の関数スコープの外で「URL」をアクセスすることができる方法がある私は、いくつかの他の関数呼び出しに、この値を返す必要があるため、:として

+1

本当に疑問が重複していると思われます。つまり、 "async functionからの戻り値"です...あなたのサンプルに非同期コードがないことを確認してください(混乱している '.then(...)それはケースです) –

+0

分度器自体が非同期ですので、そうです、それは確かです –

+0

基本的に、非同期呼び出しを行っている場合、この関数から戻り値を取得することはできません。上のリンクを見て、この関数を呼び出す関数が非同期応答を期待するようにしてください。 – UtsavShah

答えて

1

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

もう1つの方法は、関数が「コンテナ」を返すようにして、後で膨らませる方法です。その後、コンテナを確認することができます。動作非同期であるあなたが間隔か何かでそれを確認することができますので、それは、準備ができてたとき、あなたは知らないでしょう...

// 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 
+0

ここでgetUrl()を呼び出す必要がありますか? –

+0

あなたが直面している問題は、URLを取得する操作が非同期であることです。したがって、単に 'var url = getCurrentUrl()'と言うことはできません。コールバックを使用して、コールバックにURLまたは何かを行う必要があります。第2または第3のアプローチを使用する必要があります。 –

関連する問題

 関連する問題