如何修复“多次调用写回调”
Posted
技术标签:
【中文标题】如何修复“多次调用写回调”【英文标题】:How to fix 'write callback called multiple times' 【发布时间】:2019-12-01 14:55:50 【问题描述】:对于以前运行良好的项目,我突然收到一个我不理解的 gulp 错误。我没有更改我的 gulpfile.js 中的任何内容,所以我不明白是什么导致了错误。任何人都可以启发我吗?
这是我得到的错误:
Error: write callback called multiple times
at DestroyableTransform.afterTransform (/Users/hannah/Documents/random projects/salamander/node_modules/readable-stream/lib/_stream_transform.js:84:31)
at EventEmitter.signals.on.err (/Users/hannah/Documents/random projects/salamander/node_modules/gulp-cache/lib/index.js:451:7)
at EventEmitter.emit (events.js:198:13)
at DestroyableTransform.onError (/Users/hannah/Documents/random projects/salamander/node_modules/gulp-cache/lib/index.js:288:15)
at Object.onceWrapper (events.js:286:20)
at DestroyableTransform.emit (events.js:203:15)
at Immediate.<anonymous> (/Users/hannah/Documents/random projects/salamander/node_modules/through2-concurrent/through2-concurrent.js:37:14)
at runCallback (timers.js:706:11)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
Emitted 'error' event at:
at DestroyableTransform.onerror (/Users/hannah/Documents/random projects/salamander/node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_readable.js:558:12)
at DestroyableTransform.emit (events.js:198:13)
at DestroyableTransform.afterTransform (/Users/hannah/Documents/random projects/salamander/node_modules/readable-stream/lib/_stream_transform.js:84:17)
at EventEmitter.signals.on.err (/Users/hannah/Documents/random projects/salamander/node_modules/gulp-cache/lib/index.js:451:7)
[... lines matching original stack trace ...]
at runCallback (timers.js:706:11)
【问题讨论】:
【参考方案1】:如果其他人有这个问题:
我发现错误来自我的图像缩小任务 (gulp-imagemin)。我的图像文件夹中有一些 SVG 文件,我认为这些文件的结构不正确或其他什么。我将它们从图像文件夹中删除,然后 gulp 再次开始运行。
【讨论】:
【参考方案2】:这实际上是因为我们使用了 imagemin 的插件和缓存。
请运行这个 npm rebuild jpegtran-bin 这将重置它,然后再次运行你的 gulp 任务评论!
谢谢。
【讨论】:
【参考方案3】:在我的例子中,它是使用 imagemin.gifsicle() 和一个大的动画 gif 文件 (57Mb) 进行优化。用 PhotoShop 重新保存图像没有帮助。我不确定问题的根源,但删除文件可以解决问题。
【讨论】:
【参考方案4】:我的问题是一个愚蠢的问题...我正在使用 through2 来管道和替换我的文件的内容并将其包装为一个函数。好吧,这个函数试图 console.log 一个从未在调用它的逻辑分支中定义的变量。
所以,是的,错误消息让我看起来比我需要的更深入,因为我本来预期的是未定义的类型错误,而不是我得到的“多次调用写回调”。
【讨论】:
以上是关于如何修复“多次调用写回调”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“getOutputStream() 已为此响应调用”