typescript - 开玩笑的打字稿请求进度管道未刷新
问题描述
我在 Jest 测试中从 request-progress 实现了这个功能。
var fs = require('fs');
var request = require('request');
var progress = require('request-progress');
async function downloader()
Promise(resolve, reject) => {
// The options argument is optional so you can omit it
progress(request('https://az412801.vo.msecnd.net/vhd/VMBuild_20141027/VirtualBox /IE11/Windows/IE11.Win8.1.For.Windows.VirtualBox.zip'), {
// throttle: 2000, // Throttle the progress event to 2000ms, defaults to 1000ms
// delay: 1000, // Only start to emit after 1000ms delay, defaults to 0ms
// lengthHeader: 'x-transfer-length' // Length header to use, defaults to content-length
})
.on('progress', function (state) {
console.log('progress', state);
})
.on('error', function (err) {
// Do something with err
})
.on('end', function () {
// Do something after request finishes
})
.pipe(fs.createWriteStream('IE11.Win8.1.For.Windows.VirtualBox.zip'));
}
)
但是,管道在传输结束时不会被冲洗。当测试在“等待”后退出时,下载的文件大约为 1k 左右,小于正确的文件大小。所以我必须假设一个丢失的同花顺。
如果我在下载后运行一组更复杂的函数,那么文件的大小是正确的。这就是我启发式地将问题确定为丢失冲洗的方式。
有没有办法在 on('end' ... ) 或其他方法中强制刷新文件流?
或者,我可以添加一个等待,但它很老套,我不喜欢它。
如果我将解决方案放在 .on('end') 中,我不会得到最后一次冲洗。
如果我不包含解析,则该函数将永远不会返回。
可以放在管子上吗?
解决方案
我不得不承认 Jest / Node 框架对我来说是新的。但是经过一些迭代后起作用的是
.pipe(fs.createWriteStream(fname).on('finish', () => {resolve();}));
推荐阅读
- angular - *ngIf 仅当它与 firestore 中的数组中的值匹配时
- python - 如何创建一个循环来替换 NaN 值?
- url-rewriting - 如何修复 500.19 "faultRequestLogPath" 失败?
- angular - Angular 应用程序组件在重定向后未加载本地存储值
- c# - IENumerator 每次调用都不会产生 & 随机范围不会重置每次运行
- javascript - 为什么这个promise会解析两次,一次是正常解析,一次是promise.all?
- python - Python 中的 Turtle 程序因堆栈溢出而崩溃
- python - 多线程应用程序中的 _wait_for_tstate_lock 错误
- java - 球衣注入 AbstractBinder 没有调用配置
- c - 仅在删除链表的第一个节点时收到“双重释放或损坏”