- Async Completion
-
노드 라이브러리는 다양한 방식으로 비동기 성을 처리합니다.
가장 일반적인 패턴은 error-first callbacks이지만 streams, promises, event emitters, child processes 또는 observables가 발생할 수도 있습니다.
Gulp 작업은 이러한 모든 유형의 비동기성을 정규화합니다.
- Signal task completion
-
stream, promise, event emitter, child process 또는 observable가 작업에서 반환될 때,
성공 또는 오류는 Gulp가 계속할지 종료할지 그 여부를 알려줍니다.
작업 오류가 발생하면 gulp가 즉시 종료되고 해당 오류가 표시됩니다.
-
series ()로 작업을 구성 할 때 오류가 작성을 끝내고 더 이상 작업이 실행되지 않습니다.
parallel ()으로 작업을 구성 할 때 오류가 작성을 끝내지 만 다른 병렬 작업은 완료되거나 완료되지 않을 수 있습니다.
- Returning a stream(스트림 반환)
-
const { src, dest } = require('gulp');
function streamTask() {
return src('*.js')
.pipe(dest('output'));
}
exports.default = streamTask;
- Returning a promise(프로미스 반환)
-
function promiseTask() {
return Promise.resolve('the value is ignored');
}
exports.default = promiseTask;
- Returning an event emitter
-
const { EventEmitter } = require('events');
function eventEmitterTask() {
const emitter = new EventEmitter();
// Emit has to happen async otherwise gulp isn't listening yet
setTimeout(() => emitter.emit('finish'), 250);
return emitter;
}
exports.default = eventEmitterTask;
- Returning a child process
-
const { exec } = require('child_process');
function childProcessTask() {
return exec('date');
}
exports.default = childProcessTask;
- Returning an observable
-
const { Observable } = require('rxjs');
function observableTask() {
return Observable.of(1, 2, 3);
}
exports.default = observableTask;
- Using an error-first callback
-
작업에서 아무것도 반환되지 않으면 error-first callback을 사용하여 완료 신호를 보내야합니다.
콜백은 아래 예제에서 cb ()라는 유일한 인수로 작업에 전달됩니다.
function callbackTask(cb) {
// `cb()` should be called by some async work
cb();
}
exports.default = callbackTask;
error-first callback을 사용하여 작업에서 오류가 발생했음을 알리려면 Error를 유일한 인수로 사용하여 호출하십시오.
function callbackError(cb) {
// `cb()` should be called by some async work
cb(new Error('kaboom'));
}
exports.default = callbackError;
그러나 종종이 콜백을 직접 호출하지 않고 다른 API로 전달합니다.
const fs = require('fs');
function passingCallback(cb) {
fs.access('gulpfile.js', cb);
}
exports.default = passingCallback;
- No synchronous tasks
-
동기 작업이 더 이상 지원되지 않습니다.
그들은 종종 작업에서 스트림을 반환하는 것을 잊어 버리는 것과 같이 디버그하기 어려운 미묘한 실수로 이어졌습니다.
"비동기 완료를 알리는 것을 잊었습니까?" 경고, 위에서 언급 한 기술은 사용되지 않았습니다.
이 오류를 해결하려면 error-first callback을 사용하거나 stream, promise, event emitter, child process 또는 observable 항목을 반환해야합니다.
- Using async/await
-
이전 옵션 중 하나를 사용하지 않으면 작업을 약속으로 묶는 비동기 기능으로 작업을 정의 할 수 있습니다.
이를 통해 Await를 사용하여 약속을 처리하고 다른 동기 코드를 사용할 수 있습니다.
const fs = require('fs');
async function asyncAwaitTask() {
const { version } = fs.readFileSync('package.json');
console.log(version);
await Promise.resolve('some result');
}
exports.default = asyncAwaitTask;