2017-07-11 3 views
1

次のスニペットでは、10秒間の遅延なしにプログレス・コールが継続的にトリガーされています。私は間違って遅れのないアングル・タイムアウト・コール関数

 ctrl.progress =function (fileName){ 

      if(ctrl.status < 100){ 
       ctrl.timer = $timeout(function(fileName){ 

        LookUpValueService.getImportStatus(fileName). 
        then(function(value){ 
         ctrl.status = value; 
         ctrl.progress(fileName); 
        }); 
        //ctrl.status = ctrl.status + 1;     

       }(fileName),5000); 
      } 
      else{ 
       $timeout.cancel(ctrl.timer); 
      } 
     }; ctrl.progress("test.txt"); 

答えて

2

$timeout()への最初の引数は機能自体ではなく、関数の呼び出しの結果である必要がありますつもりですどこ私に知らせてください。

ctrl.timer = $timeout(ctrl.progress(fileName), 10000); 

何が起こることはctrl.progress(fileName)がすぐに呼び出されるということである、undefinedを返し、その後、あなたは待つように$timeout()を教えて:あなたのケースで

ctrl.progress()機能を返さない、それはあなたが持っているときに、undefinedを返します10秒前にundefinedを実行してください。

ctrl.timer = $timeout(() => ctrl.progress(fileName), 10000); 

(あるいはそうでない場合はES6/2015 /活字体使用して::ctrl.timer = $timeout(function() { ctrl.progress(fileName) }, 10000);)をその行の代わりの機能を使用するために、それが動作します

変更

+0

迅速な対応に感謝します。元の投稿で提案されているようにコードを変更しましたが、それでも同じ問題に直面しています:( –

+0

@maheshreddyこれは正解ですが、前と同じことをしています。 ** timeoutコールバックの代わりにIIFEを使用しています**即座に呼び出される** function expression。 – estus

+0

aah、ありがとう、私は違うことを試していて、それをIIFEにしました。 –