331 votes

Erreur Gulp : Les tâches suivantes n'ont pas été effectuées : Avez-vous oublié de signaler l'achèvement asynchrone ?

J'ai les éléments suivants gulpfile.js que j'exécute via la ligne de commande. message gulp :

var gulp = require('gulp');

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

Je reçois le message d'erreur suivant :

[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?

J'utilise gulp 4 sur un système Windows 10. Voici la sortie de gulp --version :

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

1 votes

Si vous êtes ici parce que vous avez un problème avec webpack-stream . Utilisez ceci : github.com/shama/webpack-stream/issues/

12voto

Moftah Points 141

C'est un problème lors de la migration de gulp version 3 à 4, il suffit d'ajouter un paramètre fait à la fonction de rappel, voir exemple,

   const gulp = require("gulp")

    gulp.task("message", function(done) {
      console.log("Gulp is running...")
      done()
    });

8voto

Jonny Points 583

Je ne peux pas prétendre être très compétent en la matière mais j'ai eu le même problème et je l'ai résolu.

Il existe une 7e façon de résoudre ce problème, en utilisant un fichier de type fonction asynchrone .

Ecrivez votre fonction mais ajoutez le préfixe asynchrone .

En faisant cela, Gulp enveloppe la fonction dans une promesse, et la tâche s'exécutera sans erreur.

Exemple :

async function() {
  // do something
};

Ressources :

  1. Dernière section sur le Gulp página Achèvement asynchrone : Utilisation d'async/await .

  2. _Mozilla docs sur les fonctions asynchrones_ .

8voto

majali Points 66

Vous devez faire deux choses :

  1. Add async avant la fonction.
  2. Commencez votre fonction par return .

    var gulp = require('gulp');
    
    gulp.task('message', async function() {
        return console.log("HTTP Server Started");
    });

7voto

Solution de rechange : Nous devons appeler les fonctions de rappel (Task et Anonymous) :

function electronTask(callbackA)
{
    return gulp.series(myFirstTask, mySeccondTask, (callbackB) =>
    {
        callbackA();
        callbackB();
    })();    
}

5voto

En fait, la version 3.X était plus simple, mais la version 4.x est plus stricte en ce qui concerne les tâches synchrones et asynchrones.

El async/await est un moyen assez simple et utile pour comprendre le flux de travail et le problème.

Utilisez cette approche simple

const gulp = require('gulp')

gulp.task('message',async function(){
return console.log('Gulp is running...')
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X