node.js - 如何创建异步 Gulp 插件?

标签 node.js asynchronous gulp

这是我的代码:

const through = require('through2');

function gulpPlugin() {
    let filesCount = 0;

    function transform(file, encoding, callback) {
        if (file.stat.isDirectory())
            return callback();

        Promise.all([promise1(file), promise2(file)]).then(function(values) {
            if (values[0] === values[1]) {
                this.push(file);
                ++filesCount;
            }
            callback();
        });
    }

    function flush(callback) {
        console.log('files:', filesCount);
        callback();
    }

    return through.obj(transform, flush);
}

拥有callback参数意味着transform()可以异步运行,但这不起作用,因此没有文件通过插件传递。

底层文档 stream.Transform声称“transform() - 应该执行此特定 Transform 类中必须完成的任何操作...执行异步 I/O、处理事物等等...回调 - 在处理完提供的 block 时调用此函数”。

谁能指出我做错了什么。

最佳答案

我的错,promise回调中的上下文已经改变,所以正确的代码应该是:

const that = this;

Promise.all([promise1(file), promise2(file)]).then(function(values) {
    ...
    that.push(file);
});

关于node.js - 如何创建异步 Gulp 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020854/

相关文章:

c# - 可观察 (Rx) 用于存储库中的连续(异步)对象流

ruby-on-rails - 使用Sidekiq的delayed_extensions时未定义的方法

sass - 如何使用 postcss 来自动添加 SCSS 而不编译为 CSS?

javascript - Globbing 无法与带有 jsx 文件的 gulp eslint 一起使用

javascript - webpack 和 babel-polyfill : Can't resolve 'core-js/modules/es6.array.map' in source directory

javascript - Node.js net data 的 toArrayBuffer 不是真正的 ArrayBuffer?

javascript - 如何在异步nodejs中完成所有过程并打印出消息?

更新输出时的python子进程回调

javascript - Gulp.JS,一个源到多个动态目的地

node.js - 如何在并发 AWS lambda 函数中管理 Postgres 连接?