1

私は es6 の約束を試して連鎖させていますが、私の例がうまくいかない理由がわかりません。

printInterval() と setInterval() を複数回連鎖させ、_interval が次のように減少することを期待します。

  • このメッセージが表示されるまで 3000 ミリ秒待機しました
  • 間隔を 2000 に設定
  • このメッセージが表示されるまで 2000 ミリ秒待機しました
  • 間隔を 1000 に設定
  • このメッセージが表示されるまで 1000 ミリ秒待機しました
  • 間隔を 500 に設定
  • このメッセージが表示されるまで 500 ミリ秒待機しました

しかし、私は次のようになります:

  • このメッセージが表示されるまで 3000 ミリ秒待機しました
  • 間隔を 2000 に設定
  • 間隔を 1000 に設定
  • 間隔を 500 に設定
  • このメッセージが表示されるまで 500 ミリ秒待機しました
  • このメッセージが表示されるまで 500 ミリ秒待機しました
  • このメッセージが表示されるまで 500 ミリ秒待機しました

.

function printInterval() {
    return new Promise(function(resolve, reject){
        setTimeout(function () {
            console.log('waited ' + _interval + 'ms to display this message')
            resolve(_interval);
        }, _interval)
    })
}

function setInterval(interval){
    return new Promise(function(resolve, reject) {
        setTimeout(function () {
            console.log('setting interval to ', interval)
            _interval = interval;
            resolve(_interval);
        }, 0);
    })
}

var _interval = 3000;

printInterval()
.then(function(){setInterval(2000)})
.then(function(){printInterval()})
.then(function(){setInterval(1000)})
.then(function(){printInterval()})
.then(function(){setInterval(500)})
.then(function(){printInterval()});

ありがとう!

4

1 に答える 1

2

returnこれらの関数は、単に呼び出すだけでなく、次のようにする必要があります。

printInterval()
.then(function(){return setInterval(2000)})
.then(function(){return printInterval()})
.then(function(){return setInterval(1000)})
.then(function(){return printInterval()})
.then(function(){return setInterval(500)})
.then(function(){return printInterval()});
于 2015-06-22T13:34:41.293 に答える