首页 > 解决方案 > 当合并流计数超过 17 时,Gulp 合并流未在异步函数中触发“完成”事件

问题描述

我有以下琐碎的 gulpfile.js

const mergeStream = require("merge-stream");
const del = require("del");

exports.test = async function (cb) {
    const streamCount = 18; // to simulate the number of streams being merged.
    var streams[];
    for (let i = 0; i < streamCount; i++) {
        // generate dummy streams with gulp.src()
        streams.push(gulp.src(".", { allowEmpty: true }));
    }

    // simulate multiple streams being merged
    var stream = mergeStream(streams)
        .on("finish", () => {
            // this never gets called when `streamCount` above exceeds 17 (at least that's the threshold on my machine)
            console.log("finish");
            cb();
        });

    // simulate an awaitable operation.
    await del("test/*");

    return stream;
};

以上stream只会在小于18finish时触发。如果我删除/关键字,则无论.streamCountasyncawaitfinishstreamCount

const mergeStream = require("merge-stream");
const del = require("del");

exports.test = function (cb) {
    const streamCount = 18; // to simulate the number of streams being merged.
    var streams[];
    for (let i = 0; i < streamCount; i++) {
        // generate dummy streams with gulp.src()
        streams.push(gulp.src(".", { allowEmpty: true }));
    }

    // simulate multiple streams being merged
    var stream = mergeStream(streams)
        .on("finish", () => {
            // now this always gets called
            console.log("finish");
            cb();
        });

    // an awaitable operation not being awaited.
    del("test/*");

    return stream;
};

finish无论异步函数中合并的流数量如何,我都希望事件始终触发。有什么我错过的吗?

标签: javascriptecmascript-6async-awaitgulp

解决方案


推荐阅读