2017-10-12 16 views
0

setTimeout()に問題がありますが、関数を呼び出すのを待っているようではありません。まず、私はこれを次のように使用していました:javascript setTimeout()は、匿名関数として呼び出した後でも待機していません。

function function1(driver){ 
    driver.get(secondaryUrl); 
} 

driver.get(initialUrl); 
setTimeout(function1, 3000, driverInstance); 

これは機能していなかったので、遅延をスキップするだけでした。だから私はそれを見て、明らかに関数を無名関数としてラップすると修正されます。

function function1(driver){ 
    driver.get(secondaryUrl); 
} 

setTimeout(function(){ function1(driverInstance)}, 3000); 

しかし、これは、同じことを行うだけの遅延をスキップして、すぐにロードされている最初と2番目のURLにナビゲートします:だから私はこれを試してみました。誰かが修正を私に助けることができますか?おかげ

+0

2番目の例は期待どおりに動作しています。 –

+0

これは、* asynchrony *のポイントです。アクションが発生するまで待たずに、将来何かが起こるようにスケジューリングし、ただちに戻ります。 – Bergi

+0

私は無名関数としてラップして実行する前に待つという多数の記事を読んでいます –

答えて

0

この

setTimeout(function1, 3000, driverInstance); 

から三番目のパラメータを削除するこれはあなたの例では不足している変数の宣言があるので、私は、私が正しくあなたを理解している場合はわからないsetTimeout(function() { function1(driverInstance) }, 3000);

+0

私は関数を介してパラメータを渡す必要がありますか? –

+3

3番目のパラメータを削除するのはなぜですか?それが引数を渡す方法です。 – skyline3000

+0

これはまだ待ち時間をスキップしていて、すぐに機能を実行しています –

0

でなければなりません。 いくつかの方法でJSでオブジェクトを作成すると仮定します。そして、あなたはこのメソッドを2回呼び出す必要があります。もしそうなら、以下のようなコードが動作するはずです。私はgetメソッドをprocessUrlに置き換えました。

var url1 = 'http://something'; 
var url2 = 'http://another'; 

function Driver(url) { 
    this.processUrl = function(url) { 
    // some logic with URL 
    console.log(url); 
    } 
} 

var driver = new Driver() 

driver.processUrl(url1); 

function fun1(instance) { 
    instance.processUrl(url2) 
} 

setTimeout(fun1, 3000, driver); 

や追加機能を使用しなくても簡単な解決策:

var url1 = 'http://something'; 
var url2 = 'http://another'; 

function Driver(url) { 
    this.processUrl = function(url) { 
    // some logic with URL 
    console.log(url); 
    } 
} 

var driver = new Driver() 

driver.processUrl(url1); 
setTimeout(driver.processUrl, 3000, url2); 

ここで重要なのは何です:括弧()の欠如。関数名の最後に括弧を追加すると、コードが処理されているときに直ちに関数が呼び出されます。あなたは、参照を3秒後に呼び出されるべき機能を提供する必要があります。

関連する問題