Async: рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдирд╡ре░ 2015  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ:

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);
    }
});

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ async.asyncify рд╣реИ рд╡реИрд╕реЗ рд╣реА async.promisify рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддрдм рдореИрдВ рдмрд╕ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ async.promisify(async.mapLimit(x,10, mapper))

рд╕рднреА 22 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

asyncify рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдЧрд╛ рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╣рд▓/рдЕрд╕реНрд╡реАрдХрд╛рд░ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:

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-рдЬреЛ рднреА async рдлрд╝рдВрдХреНрд╢рди (рдЬреЛ рдХрд┐ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ) рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ 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 рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рджреЛрдВ рдХреЛ asyncify рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ async рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ 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 рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝реЗ рдЧрдПред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд asyncify-ing рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдЙрд╕реА рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ !

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 рдФрд░ рд╡рд╛рджрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред

рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХред рдпрджрд┐ Async рдиреЗ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рджрд╛-рдПрдб Async рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

async.parallel([
  async.waterfall([
    asyncFn1,
    function (result1, next) {
      //...
    }
    asyncFn2,
    //...
  ]), // no callback!
  async.each(arr, function (item, cb) {
    //...
  })
  otherAsyncFn
], done)

Async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдЖрдЬ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓рдмреИрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрднреА рднреА рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдЗрд╕рд▓рд┐рдП Async рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рдпрджрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдФрд░ рд╣рдо рдмреЛрд░реНрдб рднрд░ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдорд╛рд░реЗ рддрд░реАрдХреЗ рд╡рд┐рд╡рд┐рдз рд╣реИрдВ, рдФрд░ рдЖрдк рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдВрддрд┐рдо рдХреЙрд▓рдмреИрдХ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ Async рдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЙрдореНрдмреЛ рд╣реИред рдПрдХ рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рддрдм Async рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдХреМрди рд╕рд╛? рдХреНрдпрд╛ рд╣рдо рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реБрдП global.Promise рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдо рдмреНрд▓реВрдмрд░реНрдб рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Async рд╡рд╛рджреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░рд╣ рдХрд╛ рдмрдпрд╛рди рд╣реИ - рдлреНрдпреВрдЪрд░реНрд╕ рдкреНрд░рддрд┐рдорд╛рди рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓рдмреИрдХ-рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рдЖрджреЗрд╢ рдлрд╝рдВрдХреНрд╢рдиред рдореИрдВ рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Async рд╡рд╛рдкрд╕реА рд╡рд╛рджреЗ рдЗрд╕рдХреЗ рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди рд╕реЗ рдереЛрдбрд╝рд╛ рдмрд╛рд╣рд░ рд╣реИрдВред

@ рдЕрд░реНрд▓реА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рджреЗ рдкрд┐рдЫрд▓реЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (>=4) рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд╛рджреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рджреГрд╖реНрдЯрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд╛рджреЗ рд╣реЛрдиреЗ рдкрд░ рд╡рд╛рджрд╛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдЫреЛрдЯрд╛ рдкреЙрд▓реАрдлрд┐рд▓ рдЬреЛрдбрд╝реЗрдВ ( рдкрд┐рдВрдХреА-рд╡рд╛рджрд╛ рдЬрд╛рдВрдЪреЗрдВ) рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкреЙрд▓реАрдлрд┐рд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдиреЛрдб рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдмрд▓ рджреЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╛рдВрдЪреЗрдВ (6 рдкреАрдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ) [https://github.com/sindresorhus/got/pull/140]ред рдмрд╣реБрдд рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ async рдореЙрдбрд░реНрдирд╛рдЗрдЬреЗрд╢рди рдХреЗ рдмрд╛рдж рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ, рдХрд┐ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде async рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ _must_ рд╣реИ!

@ рдХрд┐рдХреЛрдмреАрдЯреНрд╕ : +1:

рд╡рд╛рджреЗ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдПрд╕рд┐рдВрдХреНрд╕ рдлрдВрдХреНрд╢рди рдмрдирддреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рддреЛ рдЙрдирдХреЗ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлреАрдЪрд░ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде: рдЕрдиреБрдорддрд┐ рджреЗрдВ рдХрд┐ resolve рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рд╣реИ рдпрд╛ рдирд╣реАрдВред

@aearly bluebird

@martinheidegger Bluebird рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рдпрд╣ рд╡рд╛рджрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд░рд▓ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП 76 Kb (рдорд┐рдиреАрдлрд╛рдЗрдб) рдбрд╛рд▓реЗрдЧреАред

рдлрд┐рд░ рд╕реЗ, рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдпрд╛ рд╡рд╛рджреЛрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред

  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╕рдордп рдмреИрдХрдПрдВрдб (2 рд╡рд░реНрд╖ рдпрд╛ рдЕрдзрд┐рдХ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╣реИ, рддреЛ рдЖрдк 0.10 рдпрд╛ 0.12 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХрд╛ рдХреЛрдб рдХреЙрд▓рдмреИрдХ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдмреИрдХрдПрдВрдб рдореЗрдВ ~6 рдорд╣реАрдиреЗ рд╕реЗ рдХрдо рдХрд╛ рд╕рдордп рд╣реИ рдФрд░ рдЖрдк >=4 рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╢рд╛рдпрдж рдЖрдк рдПрдХ рд╡рд╛рджрд╛ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд┐рд╢реНрд░рд┐рдд рд╢реИрд▓реА рдирд╣реАрдВ рд╣реИред

рддреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ рд╡рд╛рджреЗ; рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рджрд┐рди async рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХрд╛ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЪрд░рдо рдорд╛рдорд▓рд╛: _рдореИрдВ рдкреБрд░рд╛рдиреЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдмреИрдХрдПрдВрдб рд╡рд╛рджреЗ рд╢реИрд▓реА_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдиреЗ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ ред рдЬреЛ рддреБрдореНрд╣реЗ рдЪрд╛рд╣рд┐рдпреЗред рдмрд╕ред

рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд╛рдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ред рдирд┐рд░реНрднрд░рддрд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рд╣рдореНрдо, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ 4-5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреЗ рд╡рд╛рджреЗ рдЕрдм рднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рд░ рдХреЛрдИ рдиреЛрдб 4 рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ ES6 рд╕рдорд░реНрдерди рд╡рд╛рд▓реЗ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдЬрд╣рд╛рдВ рд▓рд╛рдЧреВ рд╣реЛ рд╡рд╣рд╛рдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдиреЛрдб 0.12 рдФрд░ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдзреВрд▓ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реЗ рдХрд┐рд╕ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдПрдХ рдХреЛ рдмрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкрд┐рдВрдХреА-рд╡рд╛рджреЗ рдХрд╛ рднреА рд╡рдЬрди рд╣реИред рд╕рд╛рде рд╣реА, рдЬреЛ рд▓реЛрдЧ рдорд╛рдирдХ ES6 рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдмрд╛рд╣рд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдмреНрд▓реВрдмрд░реНрдб рдпрд╛ q рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХреБрдЫ рднреА рд╣реЛред рдореИрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ - npm i -S async рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ - рд╡рд╛рджреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл Async рднреА рдХреБрдЫ рд╣рдж рддрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╣реА рд╣реИред рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рд╕реЗ рдПрдХ рдХрджрдо рдкреАрдЫреЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЙрд▓рдмреИрдХ рд╡рд╛рджреЛрдВ рдХреА рддрд░рд╣ рд╣реА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рддреЗрдЬрд╝, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рджреЛрдВ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдИрд╡реЗрдВрдЯ-рд▓реВрдк рдбрд┐рдлрд╝реНрд░рд▓ рд╣реЛрддрд╛ рд╣реИ)ред

рдореИрдВ рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдк рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдЕрдЧрд░ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд╛рджрд╛ рдпрд╛ рдЕрдиреНрдп "рддрддреНрдХрд╛рд▓реАрди" рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рджреЗ рдмрдирд╛рдиреЗ рдФрд░/рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд┐рд░реНрдл рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ ES6 рд╕рдорд░реНрдерди рдЕрднреА рднреА рдПрдХ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░рдирд╛ рд╣реИред

рд╕рд╣рдордд, рд╡рд╛рджреЗ рдмрдирд╛рдиреЗ рдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╕реНрддреЗ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдСрдкреНрдЯ рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╡рд╛рджреЗ рдорд╣рд╛рди рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ

рдЖрдИрдПрдордПрдЪрдУ, рд╡рд╛рджреЛрдВ + рд╕рд╣ + рдЙрдкрдЬ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреЛрдб рдХреЛрдб рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЗрд╡рд▓ .eachLimit() рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рдВрднрд╡рддрдГ, рдЙрдкрдпреЛрдЧреА рдорд╛рдорд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ @Kikobeats рдХрд╛ рдЫреЛрдЯрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд╕рдВрдж рд╣реИ , рдЗрд╕реЗ рд░реАрдбрдореА (/cc @aearly) рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдП рдЧрдП рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд╕рд┐рдВрдХреНрд╕ рдореЗрдВ рд╡рд╛рджреЛрдВ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд░реНрдерди рдХрд╛ рдХрдбрд╝рд╛ рд╡рд┐рд░реЛрдз рдХрд░реВрдВрдЧрд╛ред

@megawac рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @SEAPUNK рдХрд╛ рдЙрджрд╛рд╣рд░рдгред

@megawac I рдиреЗ async рдореЗрдВ рдХреЙрд▓рдмреИрдХ рд╢реИрд▓реА, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдлрд┐рд░ рдЕрдЧрд░ рдХреЛрдИ рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рддреИрдпрд╛рд░ рд╣реИ: +1:

@aearly , рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП =) рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЫреЛрдбрд╝
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рднреВрдорд┐

рд╢реБрдХреНрд░рд╡рд╛рд░, 22 рдЬрдирд╡рд░реА, 2016 рджреЛрдкрд╣рд░ 2:17 рдмрдЬреЗ, рдХрд┐рдХреЛ рдмреАрдЯреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@megawac https://github.com/megawac рдореИрдВрдиреЗ рдХреЙрд▓рдмреИрдХ рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛
рдФрд░ рд╡рд╛рджрд╛-async рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг
https://github.com/Kikobeats/promise-async#promise -asyncред рддреЛ рдЕрдЧрд░
рдХреЛрдИ рднреА рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреИрдпрд╛рд░ рд╣реИ [рдЫрд╡рд┐:: +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))

рдпрджрд┐ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдЙрд╕ рдкрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА

рд╢рдирд┐рд╡рд╛рд░, 17 рджрд┐рд╕рдВрдмрд░, 2016 рдХреЛ рд╢рд╛рдо 4:57 рдмрдЬреЗ, рдордиреЛрдЬ рдкрдЯреЗрд▓ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ 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 рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ async рдХреЗ рддрд░реАрдХреЗ рдмрди рдЬрд╛рдПрдВ:

// 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);
});

JSFiddle рдЙрджрд╛рд╣рд░рдг

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alexpusch picture alexpusch  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dep picture dep  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдзрдХреНрдХрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ? рдореБрдЭреЗ Async.js (рд╕рдорд╛рдирд╛рдВрддрд░ рдпрд╛ рджреМрдбрд╝ рдореЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
alfredoborrero picture alfredoborrero  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gone-phishing picture gone-phishing  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jairoGilC picture jairoGilC  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ