/ / gulp: kde je definovaná funkcia spätného volania úlohy gulp? - node.js, hlt

gulp: kde je definovaná funkcia spätného volania úlohy gulp? - node.js, hlt

Úlohu v dúšku možno definovať takto:

gulp.task("foobar", function(callback) { ... });

Snažím sa pochopiť, čo je funkcia spätného volania. Kde je definovaná? Môžem za behu programu odovzdať nejakú ďalšiu funkciu ako argument? Čo robí?

Tieto dokumenty označujú, že argument spätného volania je nápovedou pre Orchestrator, že úloha by sa mala spustiť asynchrónne, pričom vykonanie spätného volania naznačuje, že asynchronná úloha bola dokončená.

S určitým experimentovaním to vyzerá, že volanie spätného volania bez argumentov vráti stav úspechu a jeho volanie pomocou nejakého reťazca spôsobí chybu:

gulp.task("foobar", function(callback) {
callback();
});

gulp.task("bazkad", function(callback) {
callback("some string");
});

(stranou: ako umiestnim prestávku medzi bloky kódu v značení StackOverflow?)

$ gulp foobar
[09:59:54] Using gulpfile ~reposgulpprojgulpfile.js
[09:59:54] Starting "foobar"...
[09:59:54] Finished "foobar" after 56 μs
$ gulp bazkad
[10:05:49] Using gulpfile ~reposgulpprojgulpfile.js
[10:05:49] Starting "bazkad"...
[10:05:49] "bazkad" errored after 55 μs
[10:05:49] Error: some string
at formatError (~AppDataRoamingnpmnode_modulesgulpbingulp.js:169:10)
at Gulp.<anonymous> (~AppDataRoamingnpmnode_modulesgulpbingulp.js:195:15)
at Gulp.emit (events.js:107:17)
at Gulp.Orchestrator._emitTaskDone (~reposgulpprojnode_modulesgulpnode_modulesorchestratorindex.js:264:8)
at ~reposgulpprojnode_modulesgulpnode_modulesorchestratorindex.js:275:23
at finish (~reposgulpprojnode_modulesgulpnode_modulesorchestratorlibrunTask.js:21:8)
at cb (~reposgulpprojnode_modulesgulpnode_modulesorchestratorlibrunTask.js:29:3)
at Gulp.<anonymous> (~reposgulpprojgulpfile.js:35:5)
at module.exports (~reposgulpprojnode_modulesgulpnode_modulesorchestratorlibrunTask.js:34:7)
at Gulp.Orchestrator._runTask (~reposgulpprojnode_modulesgulpnode_modulesorchestratorindex.js:273:3)

Takže otázky, ktoré mám, sú:

  • Je to jediná funkcionalita spätného volania, ktorá má vyvolať výnimku, ak je splnený argument, a inak úspešne dokončiť, alebo robí niečo iné?
  • Mohol by som to prepísať nejakou inou funkciou (a bol by na to nejaký rozumný dôvod)?

Možno mi zlyhávajú moje schopnosti čítania dokumentácie (nebol by som to prvýkrát), ale zdá sa mi, že odpovede na tieto otázky nenájdem v dokumentoch API.

Ďakujeme za pomoc.

odpovede:

35 pre odpoveď č. 1

Funkcia spätného volania pochádza z nástroja Orchestrator (alebonový - zadávateľ - v aplikácii Gulp 4) a nie je v skutočnosti nič iné ako výzva, ktorá informuje systém úloh, že vaša úloha je „splnená“. Preto to zmenili na

gulp.task("something", function(done) { ... });

V nadchádzajúcich dokumentoch bude tento bod jasnejší.

Prečo potrebujete spätné volanie? Stream zvyčajne pri definovaní úlohy vrátite:

gulp.task("goodstuff", function() {
return gulp.src("./app/**/*.*")
.pipe(someotherstuff())
.pipe(gulp.dest("./dist");
});

Vrátením streamu je systém úloh schopnýnaplánovať realizáciu týchto prúdov. Ale niekedy, najmä keď ste v pekle spätného volania alebo voláte nejaký streamless plugin, nemôžete stream vrátiť. Na to slúži spätné volanie. Informovať systém úloh o tom, že ste skončili, a prejsť na ďalšie volanie v reťazci vykonania.

Na vaše otázky:

Je to jediná funkcionalita spätného volania, ktorá má vyvolať výnimku, ak je splnený argument, a inak úspešne dokončiť?

Nie, jedinou funkciou je informovať systém úloh o tom, že vaša úloha je splnená.

Je to ešte niečo, čo robí?

Nie.

Mohol by som to prepísať nejakou inou funkciou (a bol by na to nejaký rozumný dôvod)?

Nie a nie.

Je možné odovzdať funkcii úlohy hlt nejaké ďalšie argumenty?

Nie, ale prečo by si Vo svojej službe máte plný rozsah súboru JS, stačí, keď niekde umiestnite svoje argumenty.