2014-12-13 14 views
13

Aşağıdaki arama sonuçlarının birbiri ardına senkronize olarak çalışmasını istiyorum. Ama bir emir takip etmezler.Yem çağrılarını eşzamanlı olarak çalıştırmaya nasıl zorlarım?

run-sequence düğüm modülü burada göründüğü gibi serilerdeki görevleri yerine getirmeye çalışmıyorum (örneğin gulp.task("mytask", ["foo", "bar", "baz"] vb. Gibi sözdizimine sahiptir), ancak gulp "çağrıları" gibi altında.

gulp.task("dostuff", function (callback) { 

    gulp 
    .src("...") 
    .pipe(gulp.dest("..."); 

    gulp 
    .src("...") 
    .pipe(gulp.dest("..."); 

    gulp 
    .src("...") 
    .pipe(gulp.dest("..."); 

    callback(); 
}); 

Onları birbiri ardına çalıştırmasını nasıl sağlayabilirim?

+0

Sen istemiyorum yüklemek onları seri olarak çalıştır, yani paralel mi? Ama bu onları eşzamanlı olarak çalıştırmak istediğiniz gerçeğiyle çelişiyor ... Son cümleniniz de bir seri olarak ne diyeceğimi ifade ediyor. Ne istediğini seçebilir misin lütfen? –

+0

@ Aperçu Başlığın eşzamanlı olarak söylediği gibi. Seri halinde. –

+0

"Serilerdeki görevleri çalıştırmaya çalışmıyorum" –

cevap

8

asyncasync çağrılarınızı yalnızca bir görevde almanız için bir kontrol akışı olarak kullanabilirsiniz, ayrıca bir "piramit etkisi" elde etmenizi önleyebilirsiniz. Yani böyle bir şey senin bir kullanım örneği için iyi olmalı: Ayrıca bazı hata kaldırmaz ve bir sorun oluştu nerede daha iyi hedef sağlayacaktır

var async = require('async'); 

gulp.task('yeah', function (cb) { 
    async.series([ 
    function (next) { 
     gulp.src('...') 
     .pipe(gulp.dest('...') 
     .on('end', next); 
    }, 
    function (next) { 
     gulp.src('...') 
     .pipe(gulp.dest('...') 
     .on('end', next); 
    }, 
    function (next) { 
     gulp.src('...') 
     .pipe(gulp.dest('...') 
     .on('end', next); 
    } 
    ], cb); 
}); 

.

+0

Harika kütüphane! Bilmiyordum. –

+0

Evet, oldukça canlı değiştirici :) –

+0

Çok kullanışlı modül! –

0

Kullanım synchronous mode for glob

Sonra gulp.src sonucunu döndürür: (! Kıyamet piramit dikkat edin)

gulp.task('render', function() { 
    var appJsFiles = _.map(glob.sync('src/**/*.js'), function(f) { 
     return f.slice(6); 
    }); 
    // Render the file. 
    return gulp.src('src/template.html') 
     .pipe(template({ 
      scripts: appJsFiles, 
      styles: ['style1.css', 'style2.css', 'style3.css'] 
     })) 
     .pipe(gulp.dest(config.build_dir)); 
}); 
+1

Anlamadım. Bu, birbiri ardına üç tane cesur infaz nasıl yürütülür? Yemin ederim ki yeniyim, belki cevap açık, ama göremiyorum ... –

+0

Bunun, sorulan soruya cevap vereceğini sanmıyorum, ancak tam da bu sayfayı Google'dan aradığımma geldim. Gulp komutlarının çalıştırılmasından önce glob yoluyla bir dosya listesini bir diziye yükler. Teşekkürler! – tbailey000

3

Peki, sadece bu son olayı dinlemek böylece akışları var

gulp.task("dostuff", function (callback) { 

    gulp 
    .src("...") 
    .pipe(gulp.dest("...")) 
    .on('end', function() { 

     gulp 
     .src("...") 
     .pipe(gulp.dest("...")) 
     .on('end', function() { 

      gulp 
      .src("...") 
      .pipe(gulp.dest("...")) 
      .on('end', callback); 

     }); 
    }); 
}); 

Ancak, her biri bir öncekine bağımlı olan birden fazla görevde bölmek daha iyi bir model olabilir.

+0

Hepsinin tek bir göreve ihtiyacım var. Bu kod, zaten bir dizi göreve bölünmüşseniz kullanışlıdır. Tasarımım bu şekilde çalışmıyor ... –

+0

Hata! Sorunuzu yanlış yorumladı. 'gulp.src()' bir akışı döndürür, böylece tahmin ettiğim "son" olayını kullanabilirsiniz. Ben – Jan

+0

plusone Works yanıtını güncelledim, ancak tüm bunları dinamik olarak çalışma zamanında oluşturuyorsanız piramit elden çıkar. Bu durumda, kabul edilen cevap daha iyidir. Ancak bu, harici bir kütüphane kullanmak istemediğinizde basit bir durum için de geçerlidir. –

1

çalışma sekansı

belirtilen sırayla yudum görevlerin bir sekans çalıştırır. Bu işlev , çalışma sırasını tanımladığınız koşulu çözmek için tasarlanmıştır, , ancak bağımlılıkları kullanmamayı veya kullanmamayı seçin.

npm --save-dev çalışma dizisi

// runSequence will ensure this task will run the following tasks in the listed order 
gulp.task('things-to-do', callback => runSequence(
    'clean-up-workspace', 
    'copy-new-files', 
    'lint', 
    'minify', 
    'do-laundry', 
    'cook-dinner', 
    'bath-cat', 
    callback 
)); 

https://www.npmjs.com/package/run-sequence

0

son boru sonra böyle bir şey ekleyebilir

.pipe(gulp.dest(FINAL_DEST)) 
.on('end',() => gulp.src(['build']) .pipe(clean())) 
İlgili konular