2016-10-18 10 views
0

ループコールの間に1秒間待機するスクリプトを実行しようとしています。コードはiパラメータを認識しません。javascript - パラメータ付きコールバックコールバック

 for (var i = 0; i < lines.length; i++) { 
      var scanProgressInterval = setInterval(function(i) { 
      // Process the line, noting it might be incomplete. 
      if (lines[i].indexOf("(y/n)") > -1) { 
       console.log("includes (y/n)"); 
       ws.emit('scan', JSON.stringify({scan: false, question: lines[i]})); 
      } 
      else if (lines[i].indexOf("any key") > -1) { 
       console.log("any key"); 
       ws.emit('scan', JSON.stringify({scan: false, key: lines[i]})); 
      } 
      }, 1000); 
     } 

このコードには何が問題なのですか?

+0

外部カウンタでsetTimeoutを使用し、カウンタが0または1000などになるまで繰り返してください。あなたの人生を過度に複雑にしないでください。それはすでに十分に複雑です。 – Azamantes

+0

setInterval(function(i){ .......... }、1000、i); これはパラメータiをsetInterval関数 – ShwethaU

答えて

1

ここでは、 'i'はグローバルに宣言されています。

あなたの関数をクロージャとして使用してみてください。

 function scanProgressInterval(i){ 
      setInterval(function() { 
       // Process the line, noting it might be incomplete. 
       if (lines[i].indexOf("(y/n)") > -1) { 
        console.log("includes (y/n)"); 
        ws.emit('scan', JSON.stringify({scan: false, question: lines[i]})); 
       } 
       else if (lines[i].indexOf("any key") > -1) { 
        console.log("any key"); 
        ws.emit('scan', JSON.stringify({scan: false, key: lines[i]})); 
       } 
       }, 1000); 
     } 

    for (var i = 0; i < lines.length; i++) { 
      scanProgressInterval(i); 
     } 
+0

これは完全に機能しました。ありがとう! – Mumfordwiz

0

あなたは背後TIMOUTのparamsを追加する必要があります。

のsetInterval(機能、ミリ秒、PARAM1、PARAM2、...)

は、より多くの情報のためhereを探してください。ここ

0

あなたisetInterval(function(i) {...は、コールバック関数がsetInterval()関数内で呼び出されたとき、それは引数が渡さを持ちませんので、それが値を持たないことを意味setInterval()機能、の範囲にあります。

setInterval()にコールバックのパラメータとしてiを入れる必要はありません。ループ内ですでにiにアクセスできるので、単に削除するだけです。

+0

に渡します。これを試してみます。 – Mumfordwiz

関連する問題