2015-04-17 8 views
12

Nur eine einfache Frage, um zu klären, was Parameter "done" in einer Schluckaufgabe tut?Was macht die Gulp "done" Methode?

Ich verstehe, das ist der Callback in Task-Funktion wie unten gezeigt.

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

Aber was ist der Grund, es zu bestehen?

Antwort

20

Die schluck Dokumentation gibt etwas Ähnliches wie die folgenden:

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']); 

Das Fertig-Argument wird in der Callback-Funktion, die Sie Ihre Aufgaben definieren Verwendung übergeben.

Ihre Task-Funktion kann einen Funktionsparameter "Callback akzeptieren" (oft hat dieser Funktionsparameter den Namen done). Das Ausführen der done Funktion sagt Gulp "einen Hinweis, um es zu sagen, wenn die Aufgabe erledigt ist".

Gulp muss diesen Hinweis, wenn Sie einen Serie von Aufgaben bestellen möchten, die aufeinander abhängen, wie im obigen Beispiel gezeigt. (d. h. Task two wird nicht gestartet, bis Task one Aufrufe cb()) Im Wesentlichen stoppt es Aufgaben gleichzeitig ausführen, wenn Sie nicht möchten.

Sie können mehr darüber hier lesen: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support

+1

Schön erklärt. Danke @Seer – Nexus23

+2

Nur neugierig, wie Schluck prüft und weiß, ob die Funktion, die ich ihm gebe, einen Parameter hat oder nicht? Wie ist das in Javascript möglich? Das klingt nach Reflektion. –

+0

Der Rückruf ist besonders nützlich, wenn Sie innerhalb der Aufgabe einen asynchronen Prozess ausführen müssen, während die Aufgabe darauf warten soll, dass der Vorgang abgeschlossen wird, bevor Sie zurückkehren.Andernfalls könnte es ausreichen, nur den Stream zurückzugeben. Siehe auch https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support – grtjn

-3

Der done Parameter ist nicht der Rückruf, der anonyme function ist der Rückruf. done ist einfach ein Argument, das Sie zu Ihre Callback-Methode aus welchem ​​Grund auch immer übergeben können.

Ein Schluck Aufgabe ist typically defined as:

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

In der Funktion können Sie festlegen, welcher Code innerhalb der Task ausgeführt wird. Wenn dieser Code auf irgendwelche Argumente abhängig ist, können Sie sie in als Funktionsparameter übergeben:

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

In Ihrem Fall done ist wahrscheinlich ein weiterer Rückruf, der so schnell ausgeführt wird, wie die cleantask() Verfahren beendet. Es wird also als eine Art Benachrichtigungsmechanismus fungieren, wenn die Cleantask fertig ist. Dies kann jedoch nicht von Ihrem Code abgeleitet werden, da Sie den Code Ihrer cleantask()-Funktion nicht angegeben haben, also raten Sie einfach hier.

+0

Got it. Ist es der gleiche wie der asynchrone Mechanismus in Ajax? – Nexus23

+3

Das ist falsch. Sie können Argumente nicht in solche Schluckaufgaben übergeben, Sie müssten einen der vielen verfügbaren Argumentprozessoren verwenden. Siehe meine Antwort. – Seer

+1

Es ist möglich, Argumente zu Schluckaufgaben zu übergeben, zumindest mit dem Plugin [gulp-param] (https://github.com/stoeffel/gulp-param). Ich habe es vor einer Weile gemacht. Sie können jedoch richtig für Aktienschluck sein. Entschuldigen Sie. – user1438038

Verwandte Themen