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 回答