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
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдмрд╕ рд╡рд╛рдкрд╕реА рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@pawelotto рдореИрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИ рдХрд┐ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ promisify util, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореБрдЦреНрдп рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдВрдЧрдд рд╣реИ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдорд╛рдиред
рддреЛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рдПрдЧрд╛ (рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛):