【问题标题】:How to properly use returned value from delayed gulp task in another one如何在另一个中正确使用延迟的 gulp 任务的返回值
【发布时间】:2016-05-05 18:37:15
【问题描述】:

一个简单的例子:我有 2 个 gulp 任务(第二个需要从第一个中获取值),但无法在第二个设置中获得值(在第一个任务执行期间使用 setTimeout):

var gulp = require("gulp");

var values = undefined;

gulp.task("one", function(cb) {
    console.log(values);
    setTimeout(function() {
        console.log('First finnished!!!');
        values = "Vovan and Alex";
    }, 1000);
    cb(values);
})

gulp.task("two", ["one"], function() {
    console.log(values);
    console.log("Second's done!")

})

gulp.task("default", ["one", "two"]);

结果如下:

[18:24:26] Using gulpfile ~/workspace/gulpfile.js [18:24:26] Starting 'one'... undefined [18:24:26] Finished 'one' after 1.58 ms [18:24:26] Starting 'two'... undefined Second's done! [18:24:26] Finished 'two' after 302 μs [18:24:26] Starting 'default'... [18:24:26] Finished 'default' after 17 μs First finnished!!!

【问题讨论】:

    标签: javascript node.js gulp


    【解决方案1】:

    您通过调用 cb 告诉 gulp 您的任务已完成,这在您的示例中发生得太快了。如果您将cb 调用移至超时范围内,它将等待任务完成:

    var gulp = require("gulp");
    
    var values = undefined;
    
    gulp.task("one", function(cb) {
        console.log(values);
        setTimeout(function() {
            console.log('First finnished!!!');
            values = "Vovan and Alex";
            cb(values);
        }, 1000);
    })
    
    gulp.task("two", ["one"], function() {
        console.log(values);
        console.log("Second's done!")
    
    })
    
    gulp.task("default", ["one", "two"]);
    

    但是,您使用字符串数组调用 cb,而 gulp 需要某种类型的流。您可以将值写入共享变量或使用数据创建流以在任务之间传递。

    【讨论】:

    • 好吧.. 它因错误而中断` [18:43:58] 'one' 在 1 秒后出错 [18:43:58] 错误:Vovan 和 Alex `
    • 这是因为 gulp 需要一个流,而您正在传递一个字符串数组。我在答案的最后提到了这一点。
    • 您需要使用适当的数据实例化某种类型的流,然后将其返回。
    • @ssube 他不需要流。问题是您仍在将参数传递给cb 回调。这告诉 gulp 发生了错误。使用cb() 而不是cb(values)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2011-06-26
    相关资源
    最近更新 更多