2015-04-18 15 views
11

Jako część małego programu, który piszę, chciałbym użyć gulp do przekonwertowania dużego zestawu plików na przecenę. Nie jest to część etapu kompilacji oddzielonego od programu. To część programu. Więc nie używam pliku gulp do obsługi tego.W jaki sposób mogę obiecać - jednorazowe użycie łyku w mojej aplikacji?

Problem polega na tym, że ponieważ jest to asynchroniczne, chcę użyć obietnicy, która zaalarmuje mnie, gdy zadanie haustów zostanie zakończone.

Coś takiego byłoby idealne:

io.convertSrc = function() { 
    var def = q.defer(); 

    gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist), function() { 
     def.resolve('We are done!'); 
    }); 

    return def.promise; 
} 

Ale pipe nie bierze zwrotnego. Jak mogłem sobie z tym poradzić? Dzięki za pomoc, jestem trochę nowicjuszem.

Odpowiedz

14

Wszystko w haustem jest strumień, więc możesz po prostu nasłuchiwać zdarzeń end i error.

io.convertSrc = function() { 
    var def = q.defer(); 
    gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist)) 
    .on('end', function() { 
     def.resolve(); 
    }) 
    .on('error', def.reject); 
    return def.promise; 
} 

Jako bok Q 1.0 nie rozwija się (oprócz tutaj kilka poprawek i nie), i będzie całkowicie sprzeczne z Q 2.0; Polecam Bluebird jako alternatywę.

Warto również wspomnieć, że NodeJS 0,12 roku ma obietnic ES6 wbudowane w nim (nie --harmony flaga jest to konieczne), więc jeśli nie szukasz kompatybilności wstecznej można po prostu używać ich zamiast ..

io.convertSrc = function() { 
    return new Promise(function(resolve, reject) { 
    gulp.src(src + '/*.md') 
     .pipe(marked({})) 
     .pipe(gulp.dest(dist)) 
     .on('end', resolve) 
     .on('error', reject); 
    }); 
}; 
+0

Ach! Tak! Powinienem to zrozumieć! Dziękuję Ci! –

+1

Ponadto nie miałem pojęcia o obietnicy wsparcia ES6 w węźle. To szalone/niesamowite. –

+1

Dowiedziałem się tylko tego ranka, kiedy moje zgłoszenie "nowej obietnicy" zadziałało bez zainstalowania Bluebirda. Przez chwilę byłem bardzo zdezorientowany. –

2

Ponieważ zadania haustem jest strumień, można słuchać na swoich imprezach:

io.convertSrc = function() { 
    var def = q.defer(); 

    var stream = gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist)); 

    stream.on('end', function() { 
    def.resolve(); 
    }); 

    stream.on('error', function(err) { 
    def.reject(err); 
    }); 

    return def.promise; 
}; 
Powiązane problemy