当前位置:  开发笔记 > 编程语言 > 正文

如何使用Gulp 4 async/await?

如何解决《如何使用Gulp4async/await?》经验,为你挑选了1个好方法。

我正在尝试做这样的事情:

gulp.task("test", async () => {
    return gulp.src("**/*.scss")
        .pipe(print((filePath) => `File: ${filePath}`));
});

(打印是gulp-print)

但它给出了以下内容:

[22:08:43] Starting 'test'...
[22:08:43] Finished 'test' after 12 ms
[22:08:43] File: src\app\styles\app.scss
[22:08:43] File: src\app\styles\test.scss

即它在打印消息之前完成.

我正在使用Gulp 4(我认为是alpha 2)和TypeScript(1.8.0-dev.20151204).

生成的(ES6)代码如下所示:

gulp.task("test", () => __awaiter(this, void 0, Promise, function* () {
    return gulp.src("**/*.scss")
        .pipe(print((filePath) => `File: ${filePath}`));
}));

在哪里__awaiter:

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promise, generator) {
    return new Promise(function (resolve, reject) {
        generator = generator.call(thisArg, _arguments);
        function cast(value) { return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) { resolve(value); }); }
        function onfulfill(value) { try { step("next", value); } catch (e) { reject(e); } }
        function onreject(value) { try { step("throw", value); } catch (e) { reject(e); } }
        function step(verb, value) {
            var result = generator[verb](value);
            result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
        }
        step("next", void 0);
    });
};

有可能让这个工作吗?我想await在我的任务函数中使用,但是如果不将函数标记为异步,我就不能这样做.

我可能错过了一些明显的东西.



1> glen-84..:

我能够从这里和这里得到帮助。

gulp.task("test", async () => {
    await new Promise((resolve, reject) => {
        gulp.src("**/*.scss")
            .pipe(print((filePath) => `File: ${filePath}`))
            .on("end", resolve);
    });
});

在我的实际任务中,我必须使用finish事件而不是end事件(请参见上面的第二个链接)。

目前还不清楚这是如何工作的,但我认为这大致符合以下方面:

    Gulp函数是异步的,因此需要等待它们,但是由于它们不是承诺,因此必须将它们包装为一个。

    为了兑现承诺,您需要监听endfinish事件,哪个取决于最后一个管道返回的内容。

在通常需要的情况下,resume()紧跟着另一个可行的选择。这可能是因为这样。我不确定哪个选项更好。on("end")finish

我想进一步了解这一点,因此,如果您能够用简单的术语进行解释,请随时发表评论或发表答案。

编辑:您还可以返回承诺,而不是等待它。

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有