์๋ก ๋ค๋ฅธ ์์ ์ ํผํฉํ ์ ์๋๋ก ํ๋ผ๋ฏธ์ค ์ง์์ ์ถ๊ฐํฉ๋๋ค.
async.waterfall([
function (done) {
// Do something and call done()
fs.readFile(filepath, done);
},
function(content) {
// Do something and return Promise
return mongoose.models.file.create({
name: filepath,
content: content
});
}
], (err) => {
if (err) {
console.error(err);
}
});
asyncify
๋ Promise๋ฅผ ๋ฐํํ๊ณ ํด๊ฒฐ/๊ฑฐ๋ถ๋ ํธ๋ค๋ฌ์์ ์ฝ๋ฐฑ์ ํธ์ถํ๋ ๋๊ธฐ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
async.waterfall([
function (done) {
// Do something and call done()
fs.readFile(filepath, done);
},
async.asyncify(function(content) {
// Do something and return Promise
return mongoose.models.file.create({
name: filepath,
content: content
});
})
], (err, model) => {
if (err) {
console.error(err);
}
});
๊ทธ๋ฌ๋ ๊ทธ ๊ธฐ๋ฅ์ ๋ฌธ์ํ๋์ง ์์์ต๋๋ค ...
๋๋ ๋ํ ๋ ๋ค๋ฅธ ์๊ฐ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์๋์ผ๋ก ๋๊ธฐํํด์ผ ํฉ๋๋ค(๋๋ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๊น?). ES-whatever async
ํจ์(์์์ ์ผ๋ก ์ฝ์์ ๋ฐํํจ)๋ฅผ ์ ๋ฌํ ๋ ๋น๋๊ธฐ๋ ๋ฌด์์ ํด์ผ ํฉ๋๊น?
์
async.waterfall([
function (done) {
// Do something and call done()
fs.readFile(filepath, done);
},
async function(content) {
return await mongoose.models.file.create({
name: filepath,
content: content
});
}
], (err, model) => {
if (err) {
console.error(err);
}
});
๊ฐ์ธ์ ์ผ๋ก ๋น๋๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ์์ ๋น๋๊ธฐํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. async.queue์๋ ํผ๋ํด์ผ ํ๋ ๋ช ๊ฐ์ง ๋น๋๊ธฐ ํจ์๊ฐ ์์ง๋ง ์ด๊ฒ์ ์์ฑํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
import {queue, asyncify} from 'async'
const run = asyncify(async function () {
await someStuff()
})
const q = async.queue(run)
q.push('asdf')
๋ด๊ฐ ์ด๊ฒ์ ์ธ ์ ์๋ ๊ณณ
import {queue} from 'async'
async function run () {
await someStuff()
}
const q = async.queue(run)
q.push('asdf')
asyncify
๋ํ ๋ฌธ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์๋ ๋น๋๊ธฐํ ๋์์ ์ํด ์ด๊ฒ์ ์ด์ด ๋ก๋๋ค.
์ด์ ๋ํด ๋์ผํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ก ์ฝ๋ฐฑ์ ์ฌ์ฉํ๋ ๋ฉ์๋์ ๋ํด Promise ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์คํ์ ํ์ต๋๋ค. ๊ทธ๊ฒ์ ํ์ธ !
async.waterfall([
function (callback) {
callback(null, 'one', 'two')
},
function (arg1, arg2, callback) {
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three')
},
function (arg1, callback) {
// arg1 now equals 'three'
callback(null, 'done')
}
]).then(function (value) {
console.log(value === 'done')
})
๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ป๊ฒ Works๊ฐ cb ๋ฐ promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋์ง ์ฐธ์กฐํ์ญ์์ค.
๋งค์ฐ ํฅ๋ฏธ๋ก์ด. Async๊ฐ Promise๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ค๋ฉด, Promise-ed Async ํจ์๋ ๊ฝค ์ฝ๊ฒ ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํฉ๋๋ค:
async.parallel([
async.waterfall([
asyncFn1,
function (result1, next) {
//...
}
asyncFn2,
//...
]), // no callback!
async.each(arr, function (item, cb) {
//...
})
otherAsyncFn
], done)
๋น๋๊ธฐ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค.
์ค๋๋ ๋ฌธ์ ๋ ์ฝ๋ฐฑ์ด ์ ํ ์ฌํญ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋ง์ง๋ง ์ธ์๋ฅผ ์๋ตํด๋ ์ฌ์ ํ ์์ ์ด ์คํ๋ฉ๋๋ค. Async ํจ์๊ฐ ์๋์ผ๋ก ์ปค๋ฆฌ๋๋๋ก ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ฝ๋ฐฑ์ ์๋ตํ๋ฉด ํจ์๊ฐ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉ๋๊ณ ์ฝ๋ฐฑ์ผ๋ก ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ๋ฉ์๋์ ์ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ์๊ณ ์ฐ๋ฆฌ๋ ์ ๋ฐ์ ์ผ๋ก ์ ํ์ ์ฝ๋ฐฑ์ผ๋ก ์ด๋ํ๊ณ ์์ผ๋ฏ๋ก ์ค์ ๋ก ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ฐฉ๋ฒ์ ๊ฐ๋ณ์ ์ด๋ฉฐ ๊ฐ๋ณ ํจ์๋ฅผ ์ปค๋ฆฌ๋งํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ฉ์๋์์ ๋ง์ง๋ง ์ฝ๋ฐฑ์ ์๋ตํ๋ฉด Promise๋ฅผ ๋ฐํํ๊ณ Async๊ฐ Promise๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค์ ๋ ๊ฒฝ์ฐ ํฅ๋ฏธ๋ก์ด ์ฝค๋ณด์
๋๋ค. ํ ๊ฐ์ง ์ฃผ์ ๋ฌธ์ ๋ Async๊ฐ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉ๋์ด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๊ฒ์
๋๊น? ์ฐ๋ฆฌ๋ global.Promise
์ ์์กดํฉ๋๊น, ๊ตฌํ ์์ง์ด ํด๋ฆฌํ์ ์ฌ์ฉํ๋๋ก ํฉ๋๊น, ์๋๋ฉด Bluebird์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๊น? ๋ํ Async๋ Future ํจ๋ฌ๋ค์์ ์ฑํํ๊ธฐ ๋ณด๋ค๋ ์ฝ๋ฐฑ์ ์๋ฝํ๋ ํจ์์ ๋ํ ๊ณ ์ฐจ ํจ์์ธ ์ฝ์์ ๋ํ ์ผ์ข
์ ์ง์ ์
๋๋ค. ์ ๋ Promises์์ ์ํธ ์ด์ฉ์ฑ์ ์ํด ๋ชจ๋ ์ฐฌ์ฑํ์ง๋ง Async ๋ฐํ ์ฝ์์ ๊ฐ๋ ๊ฒ์ ๋์์ธ ์ฒ ํ์์ ์ฝ๊ฐ ๋ฒ์ด๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
@์ผ์ฐ
๋๋ Promises๊ฐ ๋ง์ง๋ง ๋ ธ๋ ๋ฒ์ (>=4)๊ณผ ์ผ์นํ๋ ์ํฌํ๋ก๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ฒ์ ์์๋ Promise๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ์ญ ํ๊ฒฝ์ Promise๊ฐ ์์ ๋ Promise ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋น์ ์ ๋๋ค.
์์ ํด๋ฆฌํ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง( pinkie-promise ํ์ธ) ์ ์๊ฐ์๋ ํด๋ฆฌํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ง์ง๋ง ๋ ธ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ๋ ธ๋ ๋ฒ์ ์ ๊ฐ์ ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ๋ง, ํ์ธ(6๊ฐ PR ํ๋)[https://github.com/sindresorhus/got/pull/140]. ์ข ์์ฑ์ ์์ฃผ ์์ ํ๋ก์ ํธ์์๋ ํ์๋ฐ์ง ๋ชปํ๊ณ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ง๋ ์ด ๊ธฐ๋ฅ์ ๋น๋๊ธฐ ๋ชจ๋ํ ํ์ ํฌํจ๋์ด ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ ์ฝ๊ฒ ์ ์ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ข์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ถ๋ช ํ ์ฝ์๊ณผ ๋น๋๊ธฐ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ ์์ ํ _๋ฐ๋์_!
@ํค์ฝ๋น์ธ :+1:
Promise๋ ์ต๊ณ ์ ๋น๋๊ธฐ ํจ์๊ฐ ๋๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ ํ ์ง์ ์์ด ๋น๋๊ธฐ๋ฅผ ์ํ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
polyfill ์์ด ๊ตฌํํ ์ ์์ง๋ง ๊ธฐ๋ฅ ๊ฐ์ง์ ํจ๊ป ๊ตฌํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. resolve
๋ฉ์๋๊ฐ ์๋ ์ ์ญ Promise ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ฉํฉ๋๋ค.
@aearly bluebird๋
@martinheidegger Bluebird๋ ์ด๊ฒ์ ๋ํด ๋๋ฌด ํฝ๋๋ค. Promise ๋ฉ์๋์ ๊ฐ๋จํ ์ง์์ ์ํด 76Kb(์ถ์)๋ฅผ ์บ์คํธํฉ๋๋ค.
๋ค์ ๋งํ์ง๋ง ๋ฐฑ์๋ ์ํฌํ๋ก์์ ์ฝ๋ฐฑ ๋๋ ์ฝ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ ธ๋ ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ฐ์ค๋ฌ์ด ํ๋ก์ธ์ค์ ๋๋ค.
0.10
๋๋ 0.12
๋ฒ์ ์ ์ฌ์ฉํ๋ฏ๋ก ์ฝ๋๊ฐ ์ฝ๋ฐฑ ์คํ์ผ๋ก ์์ฑ๋ฉ๋๋ค.>=4
๋
ธ๋ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ง๋ Promise ์คํ์ผ์ ์ฌ์ฉํ ๊ฒ์
๋๋ค.๊ทธ๋ฌ๋ ์ด์จ๋ ๋น์ ์ ํผํฉ ์คํ์ผ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ์ง์ Promise์ ๋ํ ์ข ์์ฑ์ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค. async๊ฐ ๋ฏธ๋์ ํ๋ผ๋ฏธ์ค๋ฅผ ์ง์ํ๋ค๋ฉด ๋ ธ๋ ๋ฒ์ ์ด ํ๋ผ๋ฏธ์ค๋ฅผ ์ง์ํ๋ค๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ: _๋๋ ์ด์ ๋ ธ๋ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ด ๋ฐฑ์๋๋ promise ์คํ์ผ์ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ต๋๋ค_. ๊ทธ๋ฐ ๋ค์ Promises ๊ฐ์ฒด๋ฅผ ์ ์ญ์ผ๋ก ์ ์ ํ๊ฑฐ๋
ํ๋ก ํธ์๋ ์ธก์์๋ ๋์ผํ ๋์์ ๋๋ค. ์์กด์ฑ์ด ํ์ํ์ง ์์ต๋๋ค.
ํ , 4-5๋ ์ ์ Promise๊ฐ ๊ฒช์๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์ ์ฉ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ฌ๋์ด ๋ ธ๋ 4 ์ด์๊ณผ ES6์ ์ง์ํ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ํด๋น๋๋ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ์ฝ์์ ์ฝ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ๋
ธ๋ 0.12 ๋ฐ ์ด์ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์๋ฅผ ๋จผ์ง ์์ ๋จ๊ฒจ๋๊ณ ํด๋ฆฌํ์ ์๊ตฌํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ค ํด๋ฆฌํ์ ์ฌ์ฉํฉ๋๊น? ์ฐ๋ฆฌ๋ ํ๋๋ฅผ ๋ฌถ๊ณ ์ถ์ง ์์ ๊ฒ์
๋๋ค. ์๋ผ์๊ฐ๋ฝ ์ฝ์์๋ ๋ฌด๊ฒ๊ฐ ์์ต๋๋ค. ๋ํ ํ์ค ES6 Promise ์ธ๋ถ์์ Promise๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ๊ทธ๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์์ด๋ ๊ฐ์ bluebird ๋๋ q ๋ฑ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ ๊ฒ์
๋๋ค. ํด๋ฆฌํ์ ์ฌ์ฉ์ ์๊ตฌํ๊ณ ์ถ์ง ์์ต๋๋ค -- npm i -S async
๋ ๋ชจ๋ ์ฌ๋๋ค์ด ํด์ผ ํ ์ผ์
๋๋ค.
Async๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๋์์ธ Promise์ ๋ํ ๋ฐ์์ด๊ธฐ๋ ํฉ๋๋ค. Promises๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ ๊ฒ์ ๊ทธ๊ฒ์์ ํ ๊ฑธ์ ๋ค๋ก ๋ฌผ๋ฌ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ ์ ํ๊ฒ ๊ด๋ฆฌ๋๋ ์ฝ๋ฐฑ์ ์ฝ์๋งํผ ๊ฐ๋ ฅํ ์ ์์ต๋๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ Promise์๋ ์ด๋ฒคํธ ๋ฃจํ ์ง์ฐ์ด ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฆ ๋๋ค).
์ ๋ ์ฝ์๊ณผ์ ์ํธ ์ด์ฉ์ฑ์ ์ํด ๋ชจ๋ ์ฐฌ์ฑํฉ๋๋ค. ํจ์๊ฐ ์ฝ์์ด๋ ๋ค๋ฅธ "์ฐ๊ฒฐ ๊ฐ๋ฅ"์ผ๋ก ์ ๋ฌ๋๋ฉด ํ์คํ ํ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ซํผ ์ ๋ฐ์ ๊ฑธ์น ES6 ์ง์์ด ์์ง ๊ฐ ๊ธธ์ด ๋ฉ๋ค๋ ์ฌ์ค ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก Promise๋ฅผ ์์ฑ ๋ฐ/๋๋ ๋ฐํํ๋ ๊ฒ์ ํผํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์ํฉ๋๋ค. ์ฝ์์ ์์ฑํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋ค์ง ์์ต๋๋ค. ์ฐจ๋ผ๋ฆฌ ์ด๋ฐ ๊ฒ์ ์ตํธ์ธ ํ์ฅ์ผ๋ก ๋ณด๊ณ ์ถ์ต๋๋ค. ์ฝ์์ ํ๋ฅญํ์ง๋ง ํญ์ ์ํ๋ ๊ฒ์ ์๋๋๋ค.
IMHO, ๋ง์ ๋
ธ๋ ์ฝ๋๋ฅผ promise + co + yield๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ ํ .eachLimit()
๋ํด์๋ง ์ง์ ๋์ฒด๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ์๋ง๋ ์ ์ฉํ ๊ฒฝ์ฐ ๋ชฉ๋ก์ ์ธ๋ป๋ณด๊ธฐ๋ณด๋ค ํจ์ฌ ์ ๊ณ ๋ณ๋์ ํจํค์ง๋ก ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค.
๋๋ @Kikobeats ์ ์์ ํ์ฅ์ ์ข์ ํ๋๋ฐ , readme(/cc @aearly)์์ ์ถ์ฒํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
๋๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ด ์ ๊ธฐํ ์ด์ ๋ก ๋น๋๊ธฐ์ Promise์ ๊ณต์ ์ง์์ ๋ํด ๊ฐ๋ ฅํ ๋ฐ๋ํฉ๋๋ค.
@megawac ํจ์๊ฐ ์ฝ์์ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ์ด๋ป์ต๋๊น? ์๋ฅผ ๋ค์ด @SEAPUNK ์ ์.
@megawac I promise-async ์์ ์ฝ๋ฐฑ ์คํ์ผ, ํ ์คํธ ๋ฐ ๋ธ๋ผ์ฐ์ ๋น๋์ ๋ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋๊ตฐ๊ฐ Promise๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ค๋น๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.+1:
@aearly , ๊ด์ฐฎ์ ๊ฒ
๊ฐ์ธ์ ์ผ๋ก ํ ์ง
2016๋
1์ 22์ผ ๊ธ์์ผ ์คํ 2์ 17๋ถ, Kiko Beats [email protected]
์ผ๋ค:
@megawac https://github.com/megawac ์ฝ๋ฐฑ ์คํ์ผ ์ง์ ์ถ๊ฐ
๋ฐ promise-async์ ๋ํ ํ ์คํธ
https://github.com/Kikobeats/promise-async#promise -async. ๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ
๋๊ตฌ๋ ์ง Promise๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ค๋น๊ฐ ๋ ๊ฒ ๊ฐ์์ [image: :+1:]โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/caolan/async/issues/956#issuecomment -174016628.
๋ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ฝ์ํ๋ ๋ ๋ค๋ฅธ ํจํค์ง์
๋๋ค.
https://github.com/eladnava/koa-async
async.asyncify๊ฐ ์๋ ๊ฒ์ฒ๋ผ async.promisify ๊ธฐ๋ฅ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ async.promisify(async.mapLimit(x,10, mapper))๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๋ฐ๋ํ์ง ์๊ฒ ์ต๋๋ค.
2016๋
12์ 17์ผ ํ ์์ผ ์คํ 4์ 57๋ถ, Manoj Patel [email protected]
์ผ๋ค:
async.asyncify๊ฐ ์๋ ๊ฒ์ฒ๋ผ async.promisify๊ฐ ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ๋ฅ.๊ทธ๋ฐ ๋ค์ async.promisify(async.mapLimit(x,10, mapper))๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/caolan/async/issues/956#issuecomment-267789633 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/ADUIEKJIDulPHAn_SeeEZbiPb3t7ORGnpks5rJFqvgaJpZM4Gh1fr
.
bluebird
๋ชจ๋์ promisifyAll ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฉ์๋๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋๋๋ก ์ฝ๋ฐฑ์ ์ฝ์์ผ๋ก ๋ณํํฉ๋๋ค.
// adds '<original-method>Async' to class
Promise.promisifyAll(async);
function somePromise() {
return async.parallelAsync([
function(cb) {
setTimeout(function(){
cb(new Error('err'), 'foo')
}, 1000);
},
function(cb) {
setTimeout(function(){
cb(null, 'bar')
}, 1000);
}
]);
}
somePromise().then(function(result){
console.log('result',result);
}).catch(function(err){
console.log('err',err);
});
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
async.asyncify๊ฐ ์๋ ๊ฒ์ฒ๋ผ async.promisify ๊ธฐ๋ฅ์ด ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ async.promisify(async.mapLimit(x,10, mapper))๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.