рдХреНрдпрд╛ рдЖрдк async.series рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ async рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд░рд▓ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред
рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд▓реЗрдХрд┐рди рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдВред http://caolan.github.io/async/global.html
рдареАрдХ рд╣реИ - рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭрд╛ рдЗрд╕ рддрд░рд╣?
const result = await async.each(openFiles, async (file) => {
try: {
await asyncOperation(file);
return null
} catch(err) {
return err
}
})
рдЪреВрдВрдХрд┐ async
рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрди рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
const result = await async.each(openFiles, async (file) => {
await asyncOperation(file);
})
рдмреЗрд╣рддрд░ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛:
for (const tasks of fileTasks) {
const result = await async.each(tasks, async (file) => {
await asyncOperation(file);
})
}
рдореИрдВ рд╕рдордЭ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдлреЙрд░-рдСрдлрд╝ рд▓реВрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдВрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛?
рдЪреВрдВрдХрд┐ async.each
рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ await
рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЕрдЪреНрдЫрд╛ рдареАрдХ рд╣реИред рддреЛ async рдХреЗ рд▓рд┐рдП/рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ async рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЕрдм рдЕрдЧрд░ рдпрд╣ async рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИрдВ?
рдХреБрдЫ рдкрд╛рдЧрд▓ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рдпреЛрдЬрдирд╛ рд╣реИред ЁЯШЙ
рдпрд╛ util.promisify()
(рдпрд╛ pify()
)
рдпрд╣ async.series
рд╕реЗ async.each
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╕реЗ рдХреНрдпреЛрдВ рдЬрд╛рддрд╛ рд╣реИ?
const _async = require('async');
const _ = require('lodash');
public doSomething = async(num) : Promise<any> => {
return num*num + 1;
}
public async getResults() {
let results = new Array<any>();
let tasks = [];
try {
const list = [1,2,3,4,5,6,7,8,9,10];
list.forEach((item) => {
tasks.push((callback) => {
this.doSomething(item.then(
(res) => {
results.push(res);
callback(null, res);
}
);
})
})
results = await new Promise((resolve) => {
_async.series(tasks, (err, res) => {
console.log(res);
if (err) {
results.push(err);
}
resolve(results);
})
});
} catch (err) {
results.push(err.message);
console.log(err);
}
return _.join(results, '\r\n');
}
@ рдЕрд░реНрд▓реА рдЕрд░реЗ рдлреЗрди рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?
рдореИрдВ caolan/async рд╕рдВрд╕реНрдХрд░рдг 2.6.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреБрдЫ рдкрд╛рдЧрд▓ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рдпреЛрдЬрдирд╛ рд╣реИред ЁЯШЙ