рдЖрдк рдПрд╕рд┐рдВрдХ рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
3.9.5
рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реБрдИ (рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг)
рдиреЛрдб 6.2.2 рдФрд░ 5.0.71.52
рддреБрдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛?
рдпрд╣ рдПрдк
var fs = require('fs'),
async = require('async'),
_dir = './data/';
var writeStream = fs.createWriteStream('./log.txt',
{'flags' : 'a',
'encoding' : 'utf8',
'mode' : 0666});
async.waterfall([
function readDir(callback) {
fs.readdir(_dir, function(err, files) {
callback(err,files);
});
},
function loopFiles(files, callback) {
files.forEach(function (name) {
callback (null, name);
});
},
function checkFile(file, callback) {
fs.stat(_dir + file, function(err, stats) {
callback(err, stats, file);
});
},
function readData(stats, file, callback) {
if (stats.isFile())
fs.readFile(_dir + file, 'utf8', function(err, data){
callback(err,file,data);
});
},
function modify(file, text, callback) {
var adjdata=text.replace(/somecompany\.com/g,'burningbird.net');
callback(null, file, adjdata);
},
function writeData(file, text, callback) {
fs.writeFile(_dir + file, text, function(err) {
callback(err,file);
});
},
function logChange(file, callback) {
writeStream.write('changed ' + file + '\n', 'utf8',
function(err) {
callback(err);
});
}
], function (err) {
if (err) {
console.log(err.message);
} else {
console.log('modified files');
}
});
рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА?
рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдерд╛?
рдореИрдВ рд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ
/home/examples/public_html/learnnode2-examples/chap3/node_modules/async/dist/async.js:837
рдЕрдЧрд░ (рдПрдлрдПрди === рд╢реВрдиреНрдп) рдирдИ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХреЗрдВ ("рдХреЙрд▓рдмреИрдХ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдЬрд╛ рдЪреБрдХрд╛ рдерд╛ред");
^
рддреНрд░реБрдЯрд┐: рдХреЙрд▓рдмреИрдХ рдкрд╣рд▓реЗ рд╣реА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рдерд╛ред
рдХреЛрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди
рдлрдВрдХреНрд╢рди рд▓реВрдкрдлрд╛рдЗрд▓реНрд╕ (рдлрд╛рдЗрд▓реЗрдВ, рдХреЙрд▓рдмреИрдХ) {
files.forEach (рдлрд╝рдВрдХреНрд╢рди (рдирд╛рдо) {
рдХреЙрд▓рдмреИрдХ (рд╢реВрдиреНрдп, рдирд╛рдо);
});
},
рджреВрд╕рд░реЗ рд░рди рдкрд░ рдЦреЛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдиреЛрдб рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдпрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛ рдЬрдм рдиреЛрдб 6 рдкрд╣рд▓реА рдмрд╛рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рджреВрд╕рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди Async рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдХрдИ рдмрд╛рд░ рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рд╣реИ:
function loopFiles(files, callback) {
files.forEach(function(name) {
callback(null, name);
});
},
рдХреГрдкрдпрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП async.forEach рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рджрд┐рд▓рдЪрд╕реНрдкред рдореБрдЭреЗ рдиреЛрдб рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕реЗ рдореЗрд░реА рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрди рдореЗрдВ рдиреЛрдб 6.0.0 рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдпрд╛ред
рддреЛ, 6.0.0 рдФрд░ 6.2.2 рдХреЗ рдмреАрдЪ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг Async рдмрд┐рд▓реНрдЯ-рдЗрди forEach рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдмрд╕ рдПрдХ FYI рдХрд░реЗрдВ, async.forEach рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
function loopFiles(files, callback) {
async.forEach(files, function (name, callback) {
callback (null, name);
});
},
рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдареАрдХ рд╣реИ рдореИрдВ рд╣рд╛рд░ рдорд╛рдирддрд╛ рд╣реВрдБред
рдореИрдВрдиреЗ рдЕрдкрдиреА рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрди рдХреЛ 6.2.2 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдПрдХ рд╣реА V8 рдЗрдВрдЬрди рдкрд░ рдмрдиреЗ рд╣реИрдВред рджреЛрдиреЛрдВ Async рдХреЗ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред
рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреА рдЬрд╛рддреА рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ, рдирд╣реАрдВред
@shelleyp рдЖрдкрдХрд╛ рдЭрд░рдирд╛ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рджреЛ рдЭрд░рдиреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИред
рдЖрдкрдХреЗ async.forEach
рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рдо рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк loopFiles
рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдк рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рд▓реВрдкрдлрд╛рдЗрд▓ рдХреЛ (files, callback) => callback(null, files[0])
рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ checkFiles
, readData
рдФрд░ modify
рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдпрд╛ рджреВрд╕рд░рд╛ рдЭрд░рдирд╛ рдмрдирд╛рдПрдВ)
рдореИрдВ рдЖрдкрдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЖрдкрдХреЗ checkFiles
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓реВрдВрдЧрд╛
async.waterfall([
function readDir(callback) {
fs.readdir(_dir, callback);
},
function checkFile(files, callback) {
async.map(files, (file, cb) => {
fs.stat(_dir + file, function(err, stats) {
cb(err, {stat: stats, file: file});
});
}, (err, stats) => {
callback(err, stats);
});
},
....
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред
рдмрд╕ рдпрд╣ рдЬрд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ 6.2.2 рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдХреЛрдб рдХреЗ рдХрд╛рдо рди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХрд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЬреАрдм рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рдЙрд╕ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рд░реАрдбрдбрд┐рд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ
one рдлрд╝рд╛рдЗрд▓ (рдпрд╣ 0 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ)ред
рдХреНрдпрд╛ рдЖрдк рдиреЛрдб рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд░реАрдбрдбрд┐рд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
27 рдЬреВрди 2016 рдХреЛ рд╢рд╛рдо 5:55 рдмрдЬреЗ, "рд╢реЗрд▓реА рдкреЙрд╡рд░реНрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред
рдмрд╕ рдпрд╣ рдЬрд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ 6.2.2 рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдореЗрд░реЗ рдХреЛрдб рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ
рдХрд╛рдо рдХреЗ рдХрд╛рд░рдг рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХрд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЦреБрд▓реА/рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/caolan/async/issues/1199#issuecomment -228887866, рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe/ADUIEAfvkwCmdjmkIZIjipFGYgPQ6SzYks5qEbpgaJpZM4I_Nsg
.
рдЗрд╕ рдХреЛрдб рдиреЗ рд╣рдореЗрд╢рд╛ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдареАрдХ рд╣реИ, рд▓рд┐рдирдХреНрд╕ рдкрд░ 6.2.2 рддрдХред
рд▓реЗрдХрд┐рди рдЕрднреА рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рдБ, рдЪрд╛рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред
рд░реАрдбрдбрд┐рд░ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ ['data1.txt', 'data2.txt', 'data3.txt', 'data4.txt']
рд▓реВрдкрдлрд╛рдЗрд▓ рдореЗрдВ рдЗрдирдкреБрдЯ рд╕рдорд╛рди рд╣реИред
рдЙрд╕ рд╕рдордп, forEach рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдмреИрдХ рдХреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рдХрднреА рднреА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдПрдХ рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред
рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ, рдореИрдВ рдРрд░реЗ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрд╕рд▓реА рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдореЗрдВ рдирд╣реАрдВред рдлрд┐рд░ рднреА Node, V8 рдФрд░ Async рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред
рдореИрдВрдиреЗ рдЙрдмрдВрдЯреВ 16.04 рдореЗрдВ рдиреЛрдб 6.0.0 рдФрд░ 6.2.2 рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рдЪрд▓рд╛рдпрд╛ред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рд╛:
рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
var fs = require('fs'),
async = require('async'),
_dir = './data/';
async.waterfall([
function readDir(callback) {
fs.readdir(_dir, callback);
},
function loopFiles(files, callback) {
files.forEach(function (name) {
callback (null, name);
});
},
console.log.bind(console)
], console.error)
$ ls data
> data1.txt data2.txt
рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдирд╣реАрдВ рдЖрдЬрдорд╛рдпрд╛ред
рдЬрд╝рд░реВрд░, рдореИрдВ рдЗрд╕реЗ рдПрдХ async рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рд╕реЛрдо, рдЬреВрди реирен, реирежрезрем рдХреЛ рд░рд╛рдд рео:реиреж рдмрдЬреЗ, рд╢реЗрд▓реА рдкреЙрд╡рд░реНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдирд╣реАрдВ рдЖрдЬрдорд╛рдпрд╛ред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЦреБрд▓реА/рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/caolan/async/issues/1199#issuecomment -реиреиреорепрезрекреирейрей, рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe/ADUIEDNwRmcEjcAnVmSCHBBIHvdM6DL3ks5qQGiwgaJpZM4I_Nsg
.