ããŸããŸãªã¿ã¹ã¯ãæ··åšãããããšãã§ããããã«ãpromiseãµããŒããè¿œå ããŸãã
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);
}
});
ãããããã®æ©èœã¯ææžåãããŠããŸãã...
ãŸããå¥ã®èãããããŸãããpromiseãè¿ãé¢æ°ãèªåçã«éåæåããå¿
èŠããããŸãïŒãŸãã¯ããããé©åã«åŠçããå¿
èŠããããŸããïŒïŒã ESãæž¡ããããšãã«éåæã¯äœããã¹ãã§ãã- async
é¢æ°ïŒæé»çã«promiseãè¿ãïŒã¯äœã§ãïŒ
äŸãã°
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ã¯ããã©ã«ãã§promiseãéåæåããå¿ èŠããããšæããŸãã ç§ãæžããéåæé¢æ°ãããã€ãããããããã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')
})
ããªãã¯ããã«ã€ããŠã©ãæããŸããïŒ ããã¯ã©ã€ãã©ãªãé©å¿ãããã®ã¯ç°¡åãããããªããšæããŸãã ããšãã°ãã©ã®ããã«åäœããŠã©ã€ãã©ãªãcbãšpromiseãåŠçããããåç §ããŠãã ããã
ãšãŠãèå³æ·±ãã Asyncãpromiseãè¿ãé¢æ°ãé©åã«åŠçããå ŽåãçŽæãããAsyncé¢æ°ãéåžžã«ç°¡åã«åãå ¥ããããšãã§ããŸãã ããã¯ããŸãããã§ãããïŒ
async.parallel([
async.waterfall([
asyncFn1,
function (result1, next) {
//...
}
asyncFn2,
//...
]), // no callback!
async.each(arr, function (item, cb) {
//...
})
otherAsyncFn
], done)
éåæé¢æ°ãçµã¿åãããæ¹ãã¯ããã«ç°¡åã§ãã
ä»æ¥ã®åé¡ã¯ãã³ãŒã«ããã¯ããªãã·ã§ã³ã§ãããšããããšã§ãã æåŸã®åŒæ°ãçç¥ããŠããã¿ã¹ã¯ã¯å®è¡ãããŸãã éåæé¢æ°ãèªåçã«ã«ã¬ãŒãããããã«ããããšæããŸããã³ãŒã«ããã¯ãçç¥ããå Žåãé¢æ°ãéšåçã«é©çšãããã³ãŒã«ããã¯ã§åŒã³åºãã ãã§ãã ããããå€ãã®ã¡ãœããã«ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒããããå šé¢çã«ãªãã·ã§ã³ã®ã³ãŒã«ããã¯ã«ç§»è¡ããŠããããšãèãããšãå®éã«ã¯ãããè¡ãããšã¯ã§ããŸããã ç§ãã¡ã®æ¹æ³ã¯å¯å€ååŒæ°ã§ãããå¯å€ååŒæ°é¢æ°ãã«ã¬ãŒããããšã¯ã§ããŸããã
ãã ããã¡ãœããã®æåŸã®ã³ãŒã«ããã¯ãçç¥ããŠPromiseãè¿ãå Žåãããã³Asyncãpromiseãè¿ãé¢æ°ãåŠçããããã«èšå®ãããŠããå Žåã¯ãèå³æ·±ãã³ã³ãã§ãã 1ã€ã®å€§ããªåé¡ã¯ãAsyncãpromiseã©ã€ãã©ãªãšçµ±åããå¿
èŠããããšããããšã§ã-ã©ãã§ããïŒ global.Promise
ã«äŸåããŠãå€ããšã³ãžã³ã匷å¶çã«ããªãã£ã«ããŸããããããšãBluebirdã®ãããªãã®ã䜿çšããŸããïŒ ãŸããAsyncã¯ãpromiseã«å¯Ÿããäžçš®ã®ã¹ããŒãã¡ã³ãã§ããFuturesãã©ãã€ã ãæ¡çšããã®ã§ã¯ãªããã³ãŒã«ããã¯ãåãå
¥ããé¢æ°ã®é«éé¢æ°ã§ãã ç§ã¯ãã¹ãŠPromisesãšã®çžäºéçšæ§ã«è³æã§ãããAsync Return Promiseã䜿çšããããšã¯ããã®èšèšå²åŠããå°ãå€ããŠãããšæããŸãã
@aearly
Promisesã¯ãæåŸã®ããŒãããŒãžã§ã³ïŒ> = 4ïŒã«åãããã¯ãŒã¯ãããŒã ãšæããŸãã ãã®ããŒãžã§ã³ã§ã¯Promisesãå©çšå¯èœã§ãããããç§ã®ããžã§ã³ã¯ãã°ããŒãã«ç°å¢ã«Promisesãããå Žåã«Promiseã¯ãŒã¯ãããŒã䜿çšããããšã§ãã
å°ããªããªãã£ã«ãè¿œå ããããšã¯å¯èœã§ããïŒãã³ããŒãããã¹ã確èªããŠãã ããïŒãç§ã®æèŠã§ã¯ãããªãã£ã«ãæäŸããæå³ããããŸããã æåŸã®ããŒãæ©èœã䜿çšããããã«ããŠãŒã¶ãŒã«ããŒãããŒãžã§ã³ãã¢ããã°ã¬ãŒããããæ¹ãããã§ãããã æ¬åœã«ããã§ãã¯ããŠãã ããïŒ6 PRãåŸãŸããïŒ[https://github.com/sindresorhus/got/pull/140]ã äŸåé¢ä¿ã¯éåžžã«å°ããªãããžã§ã¯ãã§ã¯æè¿ããããããããå Žæã§äœ¿çšãããŸãã
ããããããã®æ©èœã¯ãã³ãŒãããŒã¹ãããç°¡åã«é©å¿ã§ããããã«ãéåæã¢ãžã¥ãŒã«åã®åŸã«å«ãããšããã§ãããã
ããããééããªããéåæãpromiseã«åãããã®ã¯å®å šã«_å¿ é _ã§ãïŒ
@Kikobeats ïŒ+1ïŒ
Promiseã¯ãã¡ãŒã¹ãã¯ã©ã¹ã®éåæé¢æ°ã«ãªãã€ã€ãããŸãã ãããã£ãŠããããã®å®å šãªãµããŒãããªããã°ãéåæã®ããã«å¿ æºã®ã©ã€ãã©ãªãæ³åããã®ã¯é£ããã§ãã
ããªãã£ã«ãªãã§ãæ©èœæ€åºã䜿çšããŠå®è£
ã§ãããšæããŸãã resolve
ã¡ãœãããæã€ã°ããŒãã«Promiseãªããžã§ã¯ããããå Žåã¯èš±å¯ããŸãã
@aearly bluebirdã¯ããã©ãŠã¶ã®äºææ§ãããªãã£ãªã³ã°ã®ãªã¹ãã«è¿œå ããŸãã 䜿ãã®ãé©åãããããªããšæããŸãã
@martinheideggerBluebirdã¯ããã«ã¯å€§ããããŸãã promiseã¡ãœããã®åçŽãªãµããŒãã®ããã«76KbïŒçž®å°ïŒããã£ã¹ãããŸãã
ç¹°ãè¿ããŸãããããã¯ãšã³ãã¯ãŒã¯ãããŒã§ã³ãŒã«ããã¯ãŸãã¯promiseã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããããšã¯ãããŒãããŒãžã§ã³ã«åºã¥ãèªç¶ãªããã»ã¹ã§ãã
0.10
ãŸãã¯0.12
ããŒãžã§ã³ã䜿çšãããããã³ãŒãã¯ã³ãŒã«ããã¯ã¹ã¿ã€ã«ã§èšè¿°ãããŸãã>=4
ããŒãããŒãžã§ã³ã䜿çšããŠããå Žåã¯ãããããPromiseã¹ã¿ã€ã«ã䜿çšããŸãããããããããã«ãããããªãã¯æ··åã¹ã¿ã€ã«ãæã£ãŠããŸããã
ãããã£ãŠããµããŒãPromiseã®äŸåé¢ä¿ãè¿œå ããå¿ èŠã¯ãããŸããã asyncãå°æ¥ã®ããæ¥promiseããµããŒãããå ŽåãããŒãããŒãžã§ã³ãPromisesããµããŒãããŠããã°ããã䜿çšã§ããŸãã
極端ãªå ŽåïŒ_å€ãããŒãããŒãžã§ã³ã䜿çšããŠããŸãããããã¯ãšã³ãã¯promisestyle_ã䜿çšããŠèšè¿°ãããŠããŸãã 次ã«ãPromisesãªããžã§ã¯ããã°ããŒãã«ãšããŠå®çŸ©ããããasyncã䜿çšããåã«å®çŸ©ããŸãã ããªããæããã®ãªãããªãã§ãã åã«ã
ããã³ããšã³ãåŽã§ãåãåäœã§ãã äŸåé¢ä¿ã¯å¿ èŠãããŸããã
ããŒãã4ã5幎åã«ãããã¹ãæ±ããŠããã®ãšåãåé¡ããŸã åœãŠã¯ãŸãããã§ãã 誰ããããŒã4以éã䜿çšããŠããŠãES6ããµããŒãããææ°ã®ãã©ãŠã¶ãŒã䜿çšããŠããå Žåãå¿ èŠã«å¿ããŠå éšã§promiseãç°¡åã«å©çšã§ããŸãã
åé¡ã¯ãããŒã0.12以åã®ãã©ãŠã¶ãŠãŒã¶ãŒãã»ããã®äžã«çœ®ããããªãã£ã«ããå¿
èŠãããããšã§ãã 圌ãã¯ã©ã®ããªãã£ã«ã䜿çšããŠããŸããïŒ ãã³ããŒãããã¹ã§ãããããããã³ãã«ãããã¯ãããŸããã ãŸããæšæºã®ES6 Promise以å€ã§Promiseã䜿çšããŠããå Žåã¯ã䜿çšããŠãããã®ãäœã§ãããbluebirdãqãªã©ã䜿çšããããšããå§ãããŸãã ããªãã£ã«ã®äœ¿çšãèŠæ±ããããããŸãã- npm i -S async
ã¯ãã¹ãŠã®äººãè¡ãå¿
èŠãããã¯ãã§ãã
éåæã¯ãPromisesã«å¯Ÿããåå¿ã§ããããŸããããã¯éåæã³ãŒãã管çããããã®ä»£æ¿æ¹æ³ã§ãã Promisesã®äœ¿çšãéå§ããããšã¯ãããããäžæ©åŸéããããã«æããŸãã é©åã«ç®¡çãããã³ãŒã«ããã¯ã¯ãpromiseãšåãããã匷åã§ãïŒPromisesã«ã¯ã€ãã³ãã«ãŒãã®å»¶æãçµã¿èŸŒãŸããŠãããããå€ãã®å Žåãããé«éã§ãïŒã
é¢æ°ãPromiseãŸãã¯ä»ã®ãthennableãã«æž¡ãããå Žåãããã確å®ã«å©çšããå¿ èŠãããã®ã§ãç§ã¯ãã¹ãŠPromiseãšã®çžäºéçšã«è³æã§ãã ãããããã©ãããã©ãŒã éã§ã®ES6ã®ãµããŒãã«ã¯ãŸã éã®ãããããšããäºå®ã®ããã«ãPromiseãå éšã§äœæãããè¿ãããããããšã¯é¿ããã¹ãã ãšæããŸãã
åæããŸãããçŽæãäœæãŸãã¯åŠçããã®ã¯å®ãã¯ãããŸããã ç§ã¯ããããã®ãããªãã®ããªããã€ã³æ¡åŒµãšããŠèŠãããšæããŸãã çŽæã¯çŽ æŽãããã§ãããããªãã¯ãã€ãããããæãã§ãããšã¯éããŸãã
IMHOãå€ãã®ããŒãã®ã³ãŒããpromise + co + yieldã«ç§»è¡ããåŸã .eachLimit()
ã ãã®çŽæ¥ã®çœ®ãæãã¯èŠã€ãããŸãã
ç§ã¯@Kikobeatsã®å°ããªæ¡åŒµæ©èœã奜ãã§ããreadme ïŒ/ cc @aearlyïŒã§ãããæšå¥šããã®ã¯çã«ããªã£ãŠãããããããŸããã
ç§èªèº«ãä»ã®ãŠãŒã¶ãŒãæèµ·ããçç±ã«ãããéåæã§ã®çŽæã®å ¬åŒãµããŒãã«ã¯åŒ·ãå察ããŸãã
@megawacé¢æ°ãpromiseãè¿ãå Žåã¯ã©ãã§ããïŒ äŸïŒ @SEAPUNKã®äŸã
@megawac I promise-asyncã§ã®ã³ãŒã«ããã¯ã¹ã¿ã€ã«ããã¹ãããã©ãŠã¶ãã«ãã®ãµããŒããè¿œå ããŸããã ãããªãã誰ããPromiseã䜿ãããã®ãªããããã¯æºåãã§ããŠãããšæããŸãïŒ+1ïŒ
@aearly ãããã¯ç§ãæãïŒso =ïŒã§ããã®ã§ããããã©ã°ã€ã³ã®ãŸãŸã«ããŠããããã§ã
å人çã«çéžãã
2ïŒ17 PMã§éã2016幎1æ22æ¥ã«ã¯ããã³ã¯ããŒã[email protected]
æžããŸããïŒ
@megawachttps ïŒ//github.com/megawacã³ãŒã«ããã¯ã¹ã¿ã€ã«ã®ãµããŒããè¿œå ããŸãã
ãããŠpromise-asyncã®ãã¹ã
https://github.com/Kikobeats/promise-async#promise-async ã ãã®åŸã
誰ããPromiseã䜿ãããã®ã§ãããæºåã¯ã§ããŠãããšæããŸã[ç»å:: + 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ïŒïŒãåŸ ã€ããšãã§ããŸã
ãã«ãªã¯ãšã¹ããäœæãããã®ã§ããã°ãç§ã¯ããã«å察ããŸãã
4æ57åPMã«åã2016幎12æ17æ¥ã«ã¯ãManojããããã«[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_SeEZbiPb3t7ORGnpks5rJFqvgaJpZM4Gh1fr
ã
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ïŒïŒãåŸ ã€ããšãã§ããŸã