我正在使用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);})
......然后它按照我的预期工作。
有人可以解释一下吗? 感谢。
答案 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);});
希望他们能尽快解决。