q模块中的Delay()

时间:2013-07-18 03:35:48

标签: node.js promise q

我正在使用nodejs并使用q模块学习promises。

我认为我误解了q模块中的delay() fn。

当我运行此代码时:

chain
  .then (function() {console.log('starting');})
  .then (function() {console.log('waiting 2500ms');})
  .delay(2500)
  .then (function() {console.log('done');})
  .then (function() {console.log('waiting 5500ms');})
  .delay(5500)
  .then (function() {console.log('done');})
  .then(function() {console.log('waiting 4500ms');})
  .delay(4500)
  .then (function() {console.log('done');})
  .then(function() { process.exit(0);});

我希望看到指示时间延迟 第一次延迟似乎发生了 第二次延迟似乎不是5500ms 第三次延迟,预计为4500毫秒,似乎根本没有发生。

我理解“延迟(x)”表示“然后,延迟x毫秒”。这是不正确的?我误会了吗?

如果我修改代码以用

替换每个delay(x)
   .then(function() {sleep.usleep(x * 1000);})

......然后它按照我的预期工作。

有人可以解释一下吗? 感谢。

1 个答案:

答案 0 :(得分:7)

延迟()与其他人的预期略有不同,这使得链接起来更加丑陋。我是从讨论here中学到的。

Q()
  .then (function() {console.log('starting');})
  .then (function() {console.log('waiting 2500ms');})
  //.delay(2500)
  .then( function () { return Q().delay( 2500 ); } )
  .then (function() {console.log('done');})
  .then (function() {console.log('waiting 5500ms');})
  //.delay(5500)
  .then( function () { return Q().delay( 5500 ); } )
  .then (function() {console.log('done');})
  .then(function() {console.log('waiting 4500ms');})
  //.delay(4500)
  .then( function () { return Q().delay( 4500 ); } )
  .then (function() {console.log('done');})
  .then(function() { process.exit(0);});

希望他们能尽快解决。