首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Node.js测试转换流( Benchmark.js )过程中的问题

使用Node.js测试转换流( Benchmark.js )过程中的问题
EN

Stack Overflow用户
提问于 2018-12-04 21:19:13
回答 1查看 678关注 0票数 0

我正在尝试对NodeJS代码进行基准测试,但我得到了以下错误:

代码语言:javascript
复制
    events.js:167
    throw er; // Unhandled 'error' event
    ^

    Error [ERR_STREAM_WRITE_AFTER_END]: write after end
    at writeAfterEnd (_stream_writable.js:243:12)
    at Transform.Writable.write (_stream_writable.js:291:5)
    at ReadStream.ondata (_stream_readable.js:666:20)
    at ReadStream.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at ReadStream.Readable.push (_stream_readable.js:219:10)
    at lazyFs.read (internal/fs/streams.js:181:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:460:17)

    Emitted 'error' event at:
    at Transform.onerror (_stream_readable.js:690:12)
    at Transform.emit (events.js:182:13)
    at writeAfterEnd (_stream_writable.js:245:10)
    at Transform.Writable.write (_stream_writable.js:291:5)
    [... lines matching original stack trace ...]
    at lazyFs.read (internal/fs/streams.js:181:12)

我的代码独立工作,但不适用于Benchmark.js。问题出在哪里?看起来,当Benchmark.js启动第二个测试时,它尝试在关闭的文件上写入,但我看不出问题所在。

代码语言:javascript
复制
    const Benchmark = require('benchmark');
    const suite = new Benchmark.Suite;
    const fs = require('fs');
    const stream = require('stream');

    const uppercaser = new stream.Transform({
        transform: function (chunk, _, callback) {
            callback(null, chunk.toString().toUpperCase());
       }
    });

    suite.add('transform-streams', {
       defer: true,
       fn: function (deferred) {

            const readStream = fs.createReadStream('1.txt', {
               highWaterMark: 1024
            });
            const writeStream = fs.createWriteStream('write1.txt');

            readStream
               .pipe(uppercaser)
               .pipe(writeStream).on('finish', () => {
                   deferred.resolve();
                });
         }
    })
    .on('cycle', function (event) {
        console.log(String(event.target));
    }).on('complete', function () {
        console.log(this[0].stats)
    }).run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 14:20:16

您只需要在suite.add的fn支柱中移动上感知器函数,如下所示:

代码语言:javascript
复制
suite.add('transform-streams', {
   defer: true,
   fn: function (deferred) {

       const uppercaser = new stream.Transform({
         transform: function (chunk, _, callback) {
           callback(null, chunk.toString().toUpperCase());
         }
       });

        const readStream = fs.createReadStream('1.txt', {
           highWaterMark: 1024
        });
        const writeStream = fs.createWriteStream('write1.txt');

        readStream
           .pipe(uppercaser)
           .pipe(writeStream).on('finish', () => {
               deferred.resolve();
            });
     }
})
.on('cycle', function (event) {
    console.log(String(event.target));
}).on('complete', function () {
    console.log(this[0].stats)
}).run()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53621565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档