рдЖрдк рдПрд╕рд┐рдВрдХ рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
2.6.1
рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реБрдИ (рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг)
8.11.3
рдХреНрдпрд╛ рдХрд┐рдпрд╛ рддреБрдордиреЗ?
рдорд╛рди рд▓реЗрдВ рдХрд┐ fileObj рдмрд╛рд╣рд░ рд╕реЗ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ:
async.auto({
download: (downloadCB) => {
if (fileObj) {
fs.writeFile(__dirname + тАШfileNew.txtтАЩ, fileObj.content, 'base64', function (err) {
if (err){
return downloadCB(err);
}
return downloadCB(null , fileObj.generatedFileName); // works fine
});
} else {
let err = new Error('File not found');
return downloadCB(err);
}
},
collectData: ['download', async (results, collectCB) => {
console.log(typeof collectCB); // prints undefined
console.log(typeof results); // prints correct object
let res = await anHttpRequest();
if (res.response && res.response.statusCode == 200) {
return collectCB(null , 'fileCombined.txt'); // This is where the ISSUE happens
}
else if(res.response.statusCode >= 300) {
return collectCB(new Error('Request failed inside async-auto'));
}
}],
filterData: ['collectData', (results, filterCB) => {
doFilter(results.collectData, filterCB);
}],
})
рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА?
рдХрд▓реЗрдХреНрдЯрдбреЗрдЯрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдлрд╝рд┐рд▓реНрдЯрд░рдбреЗрдЯрд╛ рдХреЛ рдХрд▓реЗрдХреНрдЯрд╕реАрдмреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╛рд░рд┐рдд рдкрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдерд╛?
рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдХрд▓реЗрдХреНрдЯрд╕реАрдмреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред
рд╕рдВрд╕реНрдХрд░рдг 2.0.1 рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХреЛрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди 2.6.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрд┐рд╕реА рднреА рдХрд╛рдордХрд╛рдЬ рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд╣рдо async
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ -- рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдмрд╕ return
рдПрдХ рдорд╛рди (рдпрд╛ throw
рдПрдХ рддреНрд░реБрдЯрд┐)ред
рд╣рд╛рдВ, StackOverflow рд╕реЗ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрджрд░реНрдн рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реИ: рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛-async-рдкреНрд░рддреАрдХреНрд╖рд╛-рдЕрдВрджрд░-async-рдСрдЯреЛ-рд╢реНрд░реГрдВрдЦрд▓рд╛
рдпрд╣ async.parallel рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди async рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
async.parallel({
// NOTE: for async functions just return value or throw error
// don't use the callback
dates: async function(callback) {
var rr = await getDates(dbName, r.indi, idx);
return rr;
},
sdates: async function(callback) {
var rr = await getDates(dbName, r.spouse, idx);
return rr;
},
cdates: async function(callback) {
var rr = await getDates(dbName, r.cindi, idx);
return rr;
}
},
function(err, results) {
console.log(results);
});
рдЕрдм рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдзрд┐рдХ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЕрдзрд┐рдХ, рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рдо
async
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ -- рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдмрд╕return
рдПрдХ рдорд╛рди (рдпрд╛throw
рдПрдХ рддреНрд░реБрдЯрд┐)ред