Javascript异步示例没有';行不通

Javascript异步示例没有';行不通,javascript,asynchronous,promise,ecmascript-6,es6-promise,Javascript,Asynchronous,Promise,Ecmascript 6,Es6 Promise,我正在试验es6承诺并将其链接起来,不明白为什么我的示例不起作用 我希望多次链接printInterval()和setInterval(),并期望_interval像这样减小: 等待3000毫秒以显示此消息 将间隔设置为2000 等待2000毫秒以显示此消息 将间隔设置为1000 等待1000毫秒以显示此消息 将间隔设置为500 等待500毫秒以显示此消息 但我得到了以下信息: 等待3000毫秒以显示此消息 将间隔设置为2000 将间隔设置为1000 将间隔设置为500 等待500毫秒以显

我正在试验es6承诺并将其链接起来,不明白为什么我的示例不起作用

我希望多次链接printInterval()和setInterval(),并期望_interval像这样减小:

  • 等待3000毫秒以显示此消息
  • 将间隔设置为2000
  • 等待2000毫秒以显示此消息
  • 将间隔设置为1000
  • 等待1000毫秒以显示此消息
  • 将间隔设置为500
  • 等待500毫秒以显示此消息
但我得到了以下信息:

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


谢谢大家!

您应该
返回那些函数,而不仅仅是调用它们:

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

提示:不要覆盖全局
setInterval
函数!(与您的问题无关)这个可怕的全局
\u interval
变量是什么?你真的应该保持函数的局部性。是的,你是对的,但这只是一个理解承诺链的测试,我真的想*在那个实验案例中使用这个全局变量。你能解释一下你的第一个小费吗?我发现,setInterval函数中的setTimeout可以省略。我最初认为“使其异步”可能需要这样做,但我错了。“不覆盖全局设置间隔”是什么意思?非常感谢。只是说这是一个本地方法,你应该为你的方法选择一个不同的名称,以免混淆每个人。好的,明白了。只是一个测试用例:)谢谢你为什么没有
返回
最后一个呢?没有人明白最后的承诺:)我们同时回答:)谢谢你的解决方案,这也是我发现的@kaaposc:你认为
如果不“抓住”返回的承诺,那么
会怎么样?你在破坏锁链。
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()});