AWS ECR + Docker의 간단한 사용 흐름과 몇가지 docker 명령어를 정리합니다.
2018-12-16
Generator, Co, Async 를 이용한 비동기 순차 실행시키기
2018-03-25
Explanation
Generator, Co, Async(유틸리티 모듈) 를 이용한 비동기 순차 실행시키기.
(세가지 방법이라 묶어서 적었지만.. 사실 셋은 많은 차이점을 가지고 있습니다. Generator는 ECMAscript2015에서 정의된 표준이고, Co는 Node에서 Generator를 편하게 사용할 수 있는? 또는 그밖의 몇가지 기능들을 지원하는 모듈이며, 이 글에서의 Async는 node나 browser에서 사용할 수 있는 다양한 메서드들을 지원하는 유틸리티 모듈입니다.
Generator (link: MDN) : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator
Co : https://github.com/tj/co
Async : https://caolan.github.io/async/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function helloWorld_Hello() { setTimeout(() => { iterator.next('Hello'); }, 1000); } function helloWorld_Space(text) { setTimeout(() => { iterator.next(text + ' '); }, 1000); } function helloWorld_World(text) { setTimeout(() => { iterator.next(text + 'World'); }, 1000); } function* helloWorld() { const hello = yield helloWorld_Hello(); const space = yield helloWorld_Space(hello); const world = yield helloWorld_World(space); console.log(world); // Hello World return; } const iterator = helloWorld(); iterator.next(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
const co = require('co'); function helloWorld_Hello() { return new Promise((resolve, reject) => { setTimeout(() => { return resolve('Hello'); }, 1000); }); } function helloWorld_Space(text) { return new Promise((resolve, reject) => { setTimeout(() => { return resolve(text + ' '); }, 1000); }); } function helloWorld_World(text) { return new Promise((resolve, reject) => { setTimeout(() => { return resolve(text + 'World'); }, 1000); }); } co(function* () { const hello = yield helloWorld_Hello(); const space = yield helloWorld_Space(hello); const world = yield helloWorld_World(space); console.log(world); // Hello World return; }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
const async = require('async'); function helloWorld_Hello(callback) { setTimeout(() => { callback(null, 'Hello'); }, 1000); } function helloWorld_Space(text, callback) { setTimeout(() => { callback(null, text + ' '); }, 1000); } function helloWorld_World(text, callback) { setTimeout(() => { callback(null, text + 'World'); }, 1000); } async.waterfall([ helloWorld_Hello, helloWorld_Space, helloWorld_World, ], function (err, result) { console.log(result); // Hello World }); |