3

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

我认为我误解了delay()q 模块中的 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);});

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

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

如果我修改代码以替换delay(x)每个

   .then(function() {sleep.usleep(x * 1000);})

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

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

4

1 回答 1

7

delay() 与其他人的预期略有不同,这使得将它们链接起来更加丑陋。我是从这里的讨论中了解到的。

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

希望他们能尽快修复它。

于 2013-07-18T05:46:37.470 回答