Javascript异步示例不起作用

时间:2015-06-22 13:17:38

标签: javascript asynchronous promise ecmascript-6 es6-promise

我正在尝试es6承诺并将它们链接起来,并且不明白为什么我的例子不起作用。

我想多次链接printInterval()和setInterval()并希望_interval减少如下:

  • 等待3000ms以显示此消息
  • 将间隔设置为2000
  • 等待2000ms以显示此消息
  • 将间隔设置为1000
  • 等待1000ms以显示此消息
  • 将间隔设置为500
  • 等待500ms以显示此消息

但我得到以下内容:

  • 等待3000ms以显示此消息
  • 将间隔设置为2000
  • 将间隔设置为1000
  • 将间隔设置为500
  • 等待500ms以显示此消息
  • 等待500ms以显示此消息
  • 等待500ms以显示此消息

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()});
谢谢你!

1 个答案:

答案 0 :(得分: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()});