以前、Deferredの半永久ループの件で質問させていただいたものです。
【jQuery】半永久的にチェーンメソッドでDeferredを連結し続ける方法
ご返答を元に、半永久(ユーザーの操作がない限り続く)ループを作って見たのですが、関数間のフラグの管理ができず困っています。
問題
関数の中で、this.isReady
というフラグを使いまわしたいのですが、
setIntervalの中では、undefind
になってしまいフラグの値が取れないことがわかります。
どうすれば、setIntervar
からもフラグを取得できるようになるのでしょうか?
コード
下記が実際のコードを質問用に加工したものです。
js
1function RandomComentSlider() { 2 3 this.isReady = 0; 4 this.intervalTimer; 5 6 // 順番に作業する。 7 this.commentDeferred = function() { 8 var md = new $.Deferred; 9 10 (() => { 11 // 省略 12 })().then( 13 // 省略 14 ).then( 15 // 省略 16 ).then(() => { 17 // 準備完了フラグを立てる 18 this.setIsReadyFlag(); 19 md.resolve(); 20 }); 21 22 return md.promise(); 23 } 24 25 // フラグを有効にするための関数 26 this.setIsReadyFlag() { 27 this.isReady = 1; 28 } 29 30 // 実行プロセス 31 this.run = function() { 32 console.log(this.isReady); // 0と正しく表示される 33 34 // 初回の一回は強制始動 35 this.commentDeferred() 36 37 // 1秒ごとに状態を監視 38 this.intervalTimer = setInterval(function(){ 39 console.log(this.isReady); // undifind 40 41 if(! this.isReady) return; 42 // もし準備が整ったら新しくイベントを実行 43 console.log('new comment') 44 this.commentDeferred(); 45 }, 1000); 46 } 47 48 // ループを止める 49 this.stopTimer = function(){ 50 clearInterval(this.intervalTimer) 51 } 52 53} 54 55// 起動処理 56var random = new RandomComentSlider(); 57random.run(); 58
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/10 14:01
2018/11/10 14:04
2018/11/10 14:08
2018/11/11 06:37 編集
2018/11/11 06:52