Tehtävien asynkronisuus Gulpissa
Sinun tulisi ymmärtää, että kaikki Gulp-tehtävät - ovat asynkronisia. Mitä tämä tarkoittaa, katsotaan esimerkillä. Oletetaan, että julkisen tehtävän sisällä kutsutaan kahta yksityistä tehtävää:
function taskD(cb) {
task1(cb);
task2(cb);
cb();
}
Asynkronisuus tarkoittaa, että tehtävä task2
ei odota tehtävän task1 suorituksen päättymistä,
vaan suoritetaan
rinnakkain sen kanssa.
Mietitäänpä tätä käytännöllisemmällä esimerkillä. Oletetaan, että ensimmäinen tehtävä muuntaa LESS:in CSS:ksi, ja toinen tehtävä - minifioi saadun CSS:n.
Tällöin kohtaamme ongelman: eihän CSS-tiedostoa voi minifioida ennen kuin siihen on tullut LESS-kääntämisen tulos!
Kuitenkin, jos tehtävät suoritettaisiin synkronisesti - peräkkäin yksi toisensa jälkeen, kohtaisimme toisen ongelman: tehtävät, jotka voitaisiin suorittaa rinnakkain, suoritettaisiin peräkkäin, hidastaen Gulp:n toimintaa. Mietitäänpä tätäkin esimerkillä.
Oletetaan, että ensimmäinen tehtävä minifioi CSS-tiedostoja, ja toinen tehtävä - minifioi JavaScript tiedostoja. On ilmeistä, että nämä kaksi toisistaan riippumatonta toimintoa voidaan suorittaa samanaikaisesti.
Onneksi Gulp tarjoaa työkalut, joiden avulla voidaan eksplisiittisesti määrittää, mitkä tehtävät tulisi suorittaa rinnakkain ja mitkä - peräkkäin. Nämä työkalut käsittelemme seuraavassa oppitunnissa.
Keksi esimerkki kahdesta tehtävästä, joiden tulisi suoritua vain peräkkäin.
Keksi esimerkki kahdesta tehtävästä, joiden tulisi suoritua vain rinnakkain.