我想为IcedCoffeeScript做一个插件,因为我是它的维护者。您可以使用 Seq 之类的解决方案,但通常您会使用函数调用对控制流进行编码。我发现这种方法很难编写和维护。IcedCoffeeScript 使简单的顺序操作变得轻而易举:
console.log "hello, just wait a sec"
await setTimeout defer(), 100
console.log "ok, what did you want"
但更重要的是,它处理异步代码和标准控制流的任意组合:
console.log "Let me check..."
if isRunningLate()
console.log "Can't stop now, sorry!"
else
await setTimeout defer(), 1000
console.log "happy to wait, now what did you want?"
resumeWhatIWasDoingBefore()
循环也很好用,这里是串行调度:
for i in [0...10]
await launchRpc defer res[i]
done()
这是并行调度:
await
for i in [0...10]
launchRpc defer res[i]
done()
ICS 不仅使异步代码的顺序链更流畅,还鼓励您尽可能多地并行执行。如果您需要更改您的代码或您的并发要求,更改是最小的,而不是完全重写(就像在标准 JS/CS 或一些并发库中那样)。