2017-02-11 11 views
0

私はこれらのコードを$ http getを使ってwebserviceを呼び出すコントローラーに持っています。JavaScript - ループを遅くする

UPDATEコード:ここでは、次のコードで$ HTTP GETが非同期メソッドであるため、すぐにboothDesignatedCoordsは不定となります後

var boolGetBoothCoords = false; 
     BoothDesignatedCoordsService.getBoothDesignatedCoords(strListShortListedBooth[i], 3) 

.then(function(response) { 
     var data = response.data 
     console.log('data', data.arrBoothDesignatedCoords) 
     boothDesignatedCoords = data.arrBoothDesignatedCoords; 
     boolGetBoothCoords = true; 
}) 

console.log("boothDesignatedCoords ", boothDesignatedCoords); // undefined 
// And a lot of other codes 

しかし、プログラムはコンソールログとコードを呼び出します。私はそれを望んでいない。私は、Webサービスの消費が完了した後にのみ、プログラムがコンソールログとコードを呼び出すようにします。それはまだコンソールログを起動する理由しかし、私は知らないが、Webサービスの消費量は、この方法を使用するにもかかわらず、まだ完了していない

go(); 
    function go() { 
     console.log("hello"); 

     if (boolGetBoothCoords == false) { 
      setTimeout(go, 1000); 

     } 
     else 
     { 

     } 
    } 
    go() 

    console.log("boothDesignatedCoords ", boothDesignatedCoords); // undefined 
    // OTHER CODES that uses variable boothDesignatedCoords will be undefined  as well 

how to slow down a javascript loop:だから私はこの答えを使用して、次を行いました。誰か助けてくれますか?ありがとう。実際にあなたが本当にgo関数を呼び出す違いはありませんので、

+0

'fnProceedOtherTask1()'コールの隣で、最後の 'then'コールバックに' console.log'を含めないのはなぜですか? – andrusieczko

+0

混乱して申し訳ありません。私は自分の質問を更新しました – Antoni

+0

'setTimeout'を使って待っているよりも最後のコールバックでそれを印刷する方がいいです...サーバレスポンスが1秒以上かかるとどうなりますか?それはまだ定義されていません – andrusieczko

答えて

1

setTimeoutは、非同期です。

何が起こるだろうことは次のとおりです。

  • コールgo()機能関数内
  • コールsetTimeoutからgoはすぐにその
後(およそ)1秒
  • コールconsole.logで呼ばれるようにスケジュールされます

    あなたはおそらくしたいことはあなたのconsole.logthenでコールを置くことですバックそういう:

    var boolGetBoothCoords = false; 
     
    BoothDesignatedCoordsService.getBoothDesignatedCoords(strListShortListedBooth[i], 3) 
     
        .then(function(response) { 
     
        return response.data.arrBoothDesignatedCoords; 
     
        }) 
     
        .then(function(boothDesignatedCoords) { 
     
        console.log("boothDesignatedCoords ", boothDesignatedCoords); 
     
        });


    他のオプション(推奨しませんが)あなたのgo機能でif文のelse一部でconsole.logを置くことであろう。この場合

    、あなたはまた、全体のコードスニペットの前にboothDesignatedCoordsを定義する必要があります。

  • +0

    こんにちは、しかし、私はあなたのコードに従うなら、まだ別の問題があります。 .then(function(boothDesignatedCoords)メソッドが呼び出される前に、プログラムは既にコントローラを終了しています。 – Antoni

    +0

    AngularJSを使用していて、 '$ scope'を変更したいと思います...コールバックでそれにすべての変更を加える必要があることをお勧めします – andrusieczko

    1

    応答後に実行されると仮定したコードは、応答の後に起動する必要があります。

    var boolGetBoothCoords = false; 
    
    BoothDesignatedCoordsService.getBoothDesignatedCoords(
        strListShortListedBooth[i], 3) 
    
    .then(function(response) { 
        var data = response.data 
        console.log('data', data.arrBoothDesignatedCoords) 
        boothDesignatedCoords = data.arrBoothDesignatedCoords; 
        boolGetBoothCoords = true; 
        codeThatUsesTheResponseData(); 
    }); 
    function codeThatUsesTheResponseData() { 
        console.log("boothDesignatedCoords ", boothDesignatedCoords); // undefined 
        // And a lot of other codes 
    } 
    
    +0

    こんにちは、しかし、私はあなたのコードに従う場合はまだ別の問題があります。 codeThatUsesTheResponseDataメソッドが呼び出される前に、プログラムはすでにコントローラを終了しています – Antoni

    +0

    終了後、どのライン?コードが次の行を呼び出さないようにするには、ある時点でリターン、例外またはリフレッシュが必要です。 –

    関連する問題