Gulp错误:以下任务未完成:您是否忘记了异步完成?

前端之家收集整理的这篇文章主要介绍了Gulp错误:以下任务未完成:您是否忘记了异步完成?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下gulpfile.js,我通过命令行“gulp message”执行:
var gulp = require('gulp');

gulp.task('message',function() {
  console.log("HTTP Server Started");
});

我收到以下错误消息:

[14:14:41] Using gulpfile ~\Documents\node\first\gulpfile.js
[14:14:41] Starting 'message'...
HTTP Server Started
[14:14:41] The following tasks did not complete: message
[14:14:41] Did you forget to signal async completion?

我在Windows 10系统上使用gulp 4.这是gulp的输出–version:

[14:15:15] CLI version 0.4.0
[14:15:15] Local version 4.0.0-alpha.2

解决方法

由于您的任务可能包含异步代码,因此当您的任务执行完毕(=“异步完成”)时,必须通知gulp.

在Gulp 3.x你可以逃避,而不做这个.如果没有显式地指示异步完成,那么gulp只会假设你的任务是同步的,一旦你的任务函数返回就完成了. Gulp 4.x在这方面更加严格.你必须明确地表明任务完成.

你可以在five ways做到这一点:

1.返回Stream

如果您只是尝试打印某些东西,这不是真正的选择,但它可能是最常用的异步完成机制,因为您通常使用gulp流.这是一个(相当有创意的)示例,为您的用例演示:

var print = require('gulp-print');

gulp.task('message',function() {
  return gulp.src('package.json')
    .pipe(print(function() { return 'HTTP Server Started'; }));
});

2.返回Promise

这是一个更适合您的用例的机制.请注意,大多数情况下,您不必自己创建Promise对象,它通常由软件包提供(例如经常使用的del软件包返回Promise).

gulp.task('message',function() { 
  return new Promise(function(resolve,reject) {
    console.log("HTTP Server Started");
    resolve();
  });
});

3.调用回调函数

这可能是您的用例最简单的方式:gulp自动将回调函数作为第一个参数传递给您的任务.完成后请调用功能

gulp.task('message',function(done) {
  console.log("HTTP Server Started");
  done();
});

4.返回child process

如果您必须直接调用命令行工具,这是非常有用的,因为没有可用的node.js包装器.它适用于您的用例,但显然我不会推荐它(特别是因为它不是很便携):

var spawn = require('child_process').spawn;

gulp.task('message',function() {
  return spawn('echo',['HTTP','Server','Started'],{ stdio: 'inherit' });
});

5.返回RxJS Observable.

我从来没有使用过这个机制,但是如果你使用RxJS,这可能是有用的.如果您只想打印一些东西,那就太过分了:

var Observable = require('rx').Observable;

gulp.task('message',function() {
  var o = Observable.just('HTTP Server Started');
  o.subscribe(function(str) {
    console.log(str);
  });
  return o;
});
原文链接:https://www.f2er.com/js/151771.html

猜你在找的JavaScript相关文章