рд▓реЗрдХрд┐рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреМрди рд╕рд╛ рдкрд╣рд▓реЗ рдЖрдПрдЧрд╛ рдФрд░ рдХреМрди рд╕рд╛ рдЕрдВрддрд┐рдо рд╣реЛрдЧрд╛ред рд╡реЗ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдПрдХ рд╕реБрдВрджрд░ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рд╡рд┐рд╖рдп рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред
var process = processFsAndDb.after('fs', 'db'); asyncFsAccess( file, process.fs); asyncDbAccess(query, process.db);
рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рддреЗ рд╣реИрдВ:
рд╢рд╛рдпрдж рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ
рдЖрдорддреМрд░ рдкрд░, рдЬреЛ рд▓реЛрдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рд╡реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
var fileData = null; asyncFsAccess( file, function (data) { fileData = data; }); asyncDbAccess(query, function (dbData) { processFsAndDb(fileData, dbData); });
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдиреБрд░реЛрдз рддреЗрдЬреА рд╕реЗ рдЖрдпрд╛ред рддрдм рдлрд╝рд╛рдЗрд▓рдбреЗрдЯрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдмрд╕ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ! рдпрд╣ рджреБрдЦрдж рд╣реИ ...
рдЙрд╕рдХреЗ рд╕рд╛рде рдЕрдВрдЬреАрд░, рдореИрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдБрдЧрд╛
рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рд╣рдо рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
asyncFsAccess( file, function (fileData) { asyncDbAccess(query, function (dbData) { processFsAndDb(fileData, dbData); }); });
рдпрд╣ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреЗ рд▓рд┐рдП рдЖрд╢рд╛ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рд╕рдордп рдХрд╛ рдмрд▓рд┐рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ - рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ рдмреИрдардирд╛ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░, рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЛ рдмрд╛рд░ рдЬрд╡рд╛рдм рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ
7 рдмрд╛рд░ рдЬрд╛рдВрдЪ
рдзреНрд╡рдЬ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдЪрд░ рдЬрд╛рдБрдЪред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж, рд╣рдо рдзреНрд╡рдЬ рдХреЛ рдЙрд╕рдХреЗ рдЕрдиреБрд░реВрдк рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдпрджрд┐ рд╕рднреА рдЭрдВрдбреЗ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдкред
var fileData = dbData = null; asyncFsAccess( file, function (data) { fileData = data; if (fileData && dbData) processFsAndDb(fileData, dbData); }); asyncDbAccess(query, function (data) { dbData = data; if (fileData && dbData) processFsAndDb(fileData, dbData); });
рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВред рдХреЛрдб рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЭрдВрдбреЗ рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЛ рддреАрди рдПрдХ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддреЛ рдбреЙрдлрд┐рдЧрд╛ рдкрд╛рда рд╣реЛрдЧрд╛
7 рдмрд╛рд░ ++ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
var fileData = dbData = null; var process = function () { if (fileData && dbData) processFsAndDb(fileData, dbData); }; asyncFsAccess( file, function (data) { fileData = data; process(); }); asyncDbAccess(query, function (data) { dbData = data; process(); });
рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЭрдВрдбреЗ 4 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдлрд╝рд╛рдЗрд▓рдбреЗрдЯрд╛ рдЪрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдиреЗрдВ)
рдореЗрд░рд╛ рд╡рд┐рдХрд▓реНрдк, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рд╣реИ:
var process = function (args) { processFsAndDb(args.fs, args.db); }.after('fs', 'db'); asyncFsAccess( file, process['fs']); asyncDbAccess(query, process['db']);
рдпрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐:
var process = processFsAndDb.after('fs', 'db'); asyncFsAccess( file, process.fs); asyncDbAccess(query, process.db);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рддрд╣рдд рдЕрдореВрд░реНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:
Function.prototype.after = function () { /** * @var onReady - -, * @var after - , . * (process.fs process.db) * @var ready - , * after - , onReady */ var onReady = this, after = {}, ready = {}; var checkReady = function () { for (var i in after) if (!(i in ready)) return; onReady(ready); }; for (var i = 0, l = arguments.length; i < l; i++) { (function (key) { after[key] = function () { ready[key] = arguments; checkReady(); }; })(arguments[i]); } return after; };
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреБрд░реНрд▓рдн, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рд╣реИред