当前位置 : 主页 > 网页制作 > Nodejs >

node.js – q模块中的Delay()

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在使用nodejs并使用q模块学习promises. 我想,我误解了q模块中的delay()fn. 当我运行此代码时: chain .then (function() {console.log('starting');}) .then (function() {console.log('waiting 2500ms');}) .delay(2500)
我正在使用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毫秒”.这是不正确的?我误会了吗?

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

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

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

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

延迟()与其他人所期望的有点不同,这使得链接它们变得更加丑陋.我从讨论 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);});

希望他们能尽快解决.

网友评论