2015-04-17 14 views
12

Basta una semplice domanda per chiarire cosa fa il parametro "done" in un compito di gulp?Cosa fa il metodo Gulp "fatto"?

Capisco, questo è il callback nella funzione di attività come mostrato di seguito.

gulp.task('clean', function(done) { 
    // so some stuff 
    creategulptask(cleantask(), done); 
}); 

Ma qual è la ragione per passarlo?

risposta

20

La documentazione specifica sorso qualcosa di simile al seguente:

var gulp = require('gulp'); 

// Takes in a callback so the engine knows when it'll be done 
// This callback is passed in by Gulp - they are not arguments/parameters 
// for your task. 
gulp.task('one', function(cb) { 
    // Do stuff -- async or otherwise 
    // If err is not null and not undefined, then this task will stop, 
    // and note that it failed 
    cb(err); 
}); 

// Identifies a dependent task must be complete before this one begins 
gulp.task('two', ['one'], function() { 
    // Task 'one' is done now, this will now run... 
}); 

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

L'argomento fatto è passato alla funzione di callback si usa per definire le attività.

La funzione task può "accettare un callback" parametro funzione (spesso questo parametro funzione è denominato done). L'esecuzione della funzione done indica a Gulp "un suggerimento per dirlo quando l'attività è terminata".

Gulp ha bisogno di questo suggerimento, se volete ordinare una serie di attività che dipendono l'uno dall'altro, come mostrato nell'esempio di cui sopra . (ad esempio, l'attività two non verrà avviata fino all'attività one chiamate cb()) In pratica, impedisce alle attività di essere eseguite contemporaneamente se non le si desidera.

Si può leggere di più su questo qui: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support

+1

Ben spiegato. Grazie @Seer – Nexus23

+2

Solo curioso, come fa a controllare e sapere se la funzione che gli ho dato ha un parametro o no? Com'è possibile in Javascript? Sembra una riflessione. –

+0

Il callback è particolarmente utile se è necessario eseguire un processo asincrono all'interno dell'attività, mentre si desidera che l'attività attenda il completamento, prima di tornare.Altrimenti, basta restituire il flusso potrebbe essere sufficiente. Vedi anche https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support – grtjn

-3

Il parametro done non è il callback, l'anonimo function è il callback. done è semplicemente un argomento che è possibile passare a il metodo di callback per qualsiasi motivo.

Un compito sorso è typically defined as:

gulp.task('somename', function() { 
    // Do stuff 
}); 

Nella funzione è possibile definire quale codice viene eseguito all'interno del task. Se questo codice dipende da alcun argomento, è possibile passare come parametri della funzione:

gulp.task('birthdayTask', function(name, dateOfBirth) { 
    doFancyStuff(name, dateOfBirth); 
}); 

Nel tuo caso, done è probabilmente un altro callback che viene eseguito non appena il metodo cleantask() finito. Quindi agirà come una sorta di meccanismo di notifica quando viene eseguita la cleantask. Questo, tuttavia, non può essere derivato dal tuo codice, dal momento che non hai fornito il codice della tua funzione cleantask(), quindi basta indovinare qui.

+0

ottenuto. È lo stesso del meccanismo asincrono in ajax? – Nexus23

+3

Questo non è corretto. Non è possibile passare argomenti in compiti simili a quelli di Gulp, si dovrebbe usare uno dei molti processori argomento disponibili. Vedi la mia risposta. – Seer

+1

E 'possibile passare argomenti a gulp attività, almeno utilizzando il plugin [gulp-param] (https://github.com/stoeffel/gulp-param). L'ho fatto un po 'di tempo fa. Forse hai ragione per il gulp di riserva, comunque. Mie scuse. – user1438038