Async: рдиреЛрдб 6.2.2 рдХреЗ рд╕рд╛рде Async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдИ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ "рдХреЙрд▓рдмреИрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬреВрди 2016  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рдЖрдк рдПрд╕рд┐рдВрдХ рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

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 рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред

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

рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдХрдИ рдмрд╛рд░ рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рд╣реИ:

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 рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рдЪрд▓рд╛рдпрд╛ред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рд╛:

  • data1.txt, рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ (data1.txt)
  • рддреНрд░реБрдЯрд┐: рдХреЙрд▓рдмреИрдХ рдкрд╣рд▓реЗ рд╣реА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

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
.

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

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

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

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

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

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

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