美文网首页
Gulp 异步执行

Gulp 异步执行

作者: 暖A暖 | 来源:发表于2021-07-23 22:46 被阅读0次

Node 库有多种方式处理异步功能,最常见的模式是 error-first callbacks,除此之外,还有 streamspromise()event emitterschild processesobservablesgulp 任务规范化了所有这些类型的异步功能。

任务完成通知

当从任务中返回 streampromiseevent emitterchild processobservable 时,成功或错误值将通知 gulp 是否继续执行或结束。如果任务出错,gulp 将立即结束执行并显示该错误。

当使用 series() 组合多个任务时,任何一个任务的错误将导致整个任务组合结束,并且不会进一步执行其他任务。当使用 parallel() 组合多个任务时,一个任务的错误将结束整个任务组合的结束,但是其他并行的任务可能会执行完,也可能没有执行完。

返回 stream

const { src, dest } = require('gulp');

function streamTask() {
  return src('*.js')
    .pipe(dest('output'));
}

exports.default = streamTask;

返回 promise

function promiseTask() {
  return Promise.resolve('the value is ignored');
}

exports.default = promiseTask;

返回 event emiter

const { EventEmitter } = require('events');

function eventEmitterTask() {
  const emitter = new EventEmitter();
  // Emit has to happen async otherwise gulp isn't listening yet
  setTimeout(() => emitter.emit('finish'), 250);
  return emitter;
}

exports.default = eventEmitterTask;

返回 child process

const { exec } = require('child_process');

function childProcessTask() {
  return exec('date');
}

exports.default = childProcessTask;

返回 observable

const { Observable } = require('rxjs');

function observableTask() {
  return Observable.of(1, 2, 3);
}

exports.default = observableTask;

返回 callback

如果任务未返回任何内容,则必须使用 callback 来表示任务已完成,回调将作为以下示例中名为 cb() 的唯一参数传递给任务。

function callbackTask(cb) {
  cb();
}

exports.default = callbackTask;

如需通过 callback 把任务中的错误告知 gulp,请将 Error 作为 callback 的唯一参数。

function callbackError(cb) {
  // `cb()` should be called by some async work
  cb(new Error('kaboom'));
}

exports.default = callbackError;

然而,你通常会将此 callback 函数传递给另一个 API,而不是自己调用它。

const fs = require('fs');

function passingCallback(cb) {
  fs.access('gulpfile.js', cb);
}

exports.default = passingCallback;

使用 async/await

如果不使用前面提供到几种方式,我们还可以将任务定义为一个 async 函数,它将利用 promise 对你的任务进行包装。这将允许你使用 await 处理 promise,并使用其他同步代码。

示例:
const fs = require('fs');

async function asyncAwaitTask() {
  const { version } = fs.readFileSync('package.json');
  console.log(version);
  await Promise.resolve('some result');
}

exports.default = asyncAwaitTask;

相关文章

  • Gulp 异步执行

    Node 库有多种方式处理异步功能,最常见的模式是 error-first callbacks,除此之外,还有 s...

  • Gulp 异步执行

    Node 库有多种方式处理异步功能,最常见的模式是 error-first callbacks,除此之外,还有 s...

  • 关于同步运行gulp任务那些事

    背景 Gulp 默认将所有任务和步骤异步化运行。显而易见,Gulp 在效率上是有明显的提升的。但是如果需要同步执行...

  • gulp入门

    安装gulp 安装gulp插件 gulp使用与执行 在目录创建gulpfile.js文件 执行:gulp defa...

  • gulp 运行命令

    命令提示符执行gulp 任务名称; 编译less:命令提示符执行gulp testLess; 当执行gulp de...

  • 执行gulp server命令的时候throw err: can

    执行gulp server时 最近安装好gulp后,执行gulp serve命令时,抛出错误,gulpfile.j...

  • Gulp基础

    基础使用 yarn add gulp --dev gulpfile.js 入口文件 gulp 的任务函数都是异步的...

  • npm install gulp --save-dev

    全局安装了gulp,项目也安装了gulp 全局安装gulp是为了执行gulp任务 本地安装gulp则是为了调用gu...

  • gulp初学

    一、全局安装gulp1、说明:全局安装gulp目的是为了通过她执行gulp任务;2、安装:命令提示符执行 3、查看...

  • Gulp笔记

    Gulp.js Gulp.js 是一个构建工具,与Grunt相比,Gulp更加简洁,执行效率更高。 安装Gulp ...

网友评论

      本文标题:Gulp 异步执行

      本文链接:https://www.haomeiwen.com/subject/hzxmmltx.html