Async: рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдлрд╝рд░ре░ 2019  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

var async = require('async');

var workPool = async.queue(async (task, taskComplete)=>{
  console.log(1, taskComplete);

  async.retry(3, async (retryComplete)=>{

    console.log(2, retryComplete);
    // retryComplete(null, task);

  });
});

workPool.push("test");

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рдорд┐рд▓рд╛:

$ node test.js
1 undefined
2 undefined

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

@pawelotto рдореИрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИ рдХрд┐ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ promisify util, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореБрдЦреНрдп рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдВрдЧрдд рд╣реИ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдорд╛рдиред

рддреЛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рдПрдЧрд╛ (рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛):

import async from "async"
import {promisify} from "util"

const promiseMapLimit = promisify(async.mapLimit)
const results = await promiseMapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
})

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

https://caolan.github.io/async/

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

async.mapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
}, (err, contents) => {
    if (err) throw err
    console.log(contents)
})

рд╣рд╛рдВ, Async рдХреЙрд▓рдмреИрдХ рдХреЛ async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдмрд╕ рд╡рд╛рдкрд╕ рдЖрдПрдВред

рдФрд░ рдЕрдВрддрд┐рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ)?

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ return async рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреМрди рд╕рд╛ async рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╛рди рджреЗрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЬреЛ рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рд╢реВрдиреНрдп рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рддрдм рддрдХ рдХрд░реЛ

@pawelotto рдореИрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИ рдХрд┐ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ promisify util, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореБрдЦреНрдп рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдВрдЧрдд рд╣реИ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдорд╛рдиред

рддреЛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рдПрдЧрд╛ (рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛):

import async from "async"
import {promisify} from "util"

const promiseMapLimit = promisify(async.mapLimit)
const results = await promiseMapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
})

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд╡-рдПрд╕рд┐рдВрдХреНрд╕ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ

@kazaff рдЕрдЪреНрдЫрд╛, рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдзрдиреНрдпрд╡рд╛рдж!

@kazaff рд▓реАрдЬреЗрдВрдб!

@kazaff b4dnewz рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рдирд╡-async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдмрд╕ рд╡рд╛рдкрд╕реА рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓

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

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

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

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

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

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

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