2016-04-06 18 views
2

Angular2とZone.jsを使用してスケジュールされたタスクがあるかどうかを確認する方法はありますか?Angular2とZone.jsでスケジュールされたタスクがあるかどうか確認してください

はのは、私がこのコンポーネント

import... 

@Component({...}) 
export class MyComponent { 

    public myMethod() { 
    console.log('enter my method'); 
    setTimeout(function() { console.log('task1'); }, 1000); 
    setTimeout(function() { console.log('task2'); }, 1500); 
    } 

} 

を持っていると私は両方task1task2が完了したときに通知することとしましょう。私はこのようにonUnstableonStableイベントにサブスクライブしてる私のアプリのコンポーネントで

:私は何を期待myMethod()を呼び出すときに、そう

@Component({ 
    selector: 'app', 
    directives: [MyComponent], 
    template: `<mycmp></mycmp>` 
}) 
export class AppComponent { 

    constructor(private zone:NgZone) { 
    console.log('start app component constructor'); 

    zone.onUnstable.subscribe(function(args){ 
     console.log('enter unstable'); 
    }); 

    zone.onStable.subscribe(function(args){ 
     console.log('enter stable'); 
    }); 
    } 
} 

は、ログのこのシーケンスです:

enter unstable 
enter my method 
task1 
task2 
enter stable 

しかし私はこれを得る:

enter unstable 
enter my method 
enter stable 
enter unstable 
task1 
enter stable 
enter unstable 
task2 
enter stable 

答えて

0

私は彼は結果する。

合計で3つのマイクロタスクがあります。

タスク1

public myMethod() { ... }

Task2の

setTimeout(function() { console.log('task1'); }, 1000);

タスク3

setTimeout(function() { console.log('task2'); }, 1500);

最初の3行が関連していますタスク1の開始と完了。

次の3行は、タスク2の開始と完了に関連しています。

最後の3行は、タスク3の開始と完了に関連しています。私が得る理由

[OK]を

+0

新しいマイクロタスクを作成myMethodを呼び出しすることができるイベントハンドラを含む非同期操作のそれぞれは、そのログがクリアされますが、すべての3つのタスクが完了したら、通知取得する方法はありますか? – Gigitsu

関連する問題