在 Max 的回答之上,延续样式编程的适当用法应该是替换一次性回调,而不是重复回调。所做的只是等待其所有await延期完成,以便继续前进。以下示例使用node.js'fs模块读取大文件将重现此错误:
toread = process.argv[2]
fs = require 'fs'
rs = fs.createReadStream toread
await rs.on 'data', defer content
console.log "content: #{content}"
现在用一个巨大的文本文件运行这个脚本。由于由于data大文件内容不适合缓冲区,事件将多次触发,因此它会多次触发生成的延迟回调,从而给出相同的错误。
<partial file contents...>
ICED warning: overused deferral at <anonymous> (C:\Users\kk\3.coffee:4)
ICED warning: overused deferral at <anonymous> (C:\Users\kk\3.coffee:4)
ICED warning: overused deferral at <anonymous> (C:\Users\kk\3.coffee:4)
...
在这种情况下,使用不完整是错误await/defer的。content这正是 Max 提到此错误的存在通常表示代码错误的原因。事实上,IMO 它应该抛出一个错误,而不是一个可以静音的警告。