Async: es6 async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреИрд╕реЗ рдХрддрд╛рд░рдмрджреНрдз рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдордИ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдШрдЯрдирд╛рдУрдВ рдкрд░ "рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ" рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рднрд╛рдЧрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рддреЛ рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

const aida = {
  async launch() {
    await someFunction();
  },
  async login() {
    await Auth();
    await UserSettings();
  },
  async goToMonth() {
    await JumpToDefaultMonth();
  }
};


const q = async.queue(function(task, callback) {
  console.log('hello ' + task.name);
  callback();
}, 1);

q.drain = function() {
  console.log('all items have been processed');
};

q.push(aida.launch());
q.push(aida.login());
q.push(aida.goToMonth());

рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП login() рдХреЗрд╡рд▓ launch() рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЪрд▓рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдпрд╛ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрд░реЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@codeofsumit рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдереЛрдбрд╝реА рдЧреБрдорд░рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдереА, рдореБрдЭреЗ queue рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

  1. рдХрддрд╛рд░ рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдкрд╣рд▓реЗ рдзрдХреНрдХрд╛ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛

queue рдХреЛ task рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдЬрдм рдЖрдк q.push рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдЪрд▓рд╛ред

рд╕рд╛рдЗрдб рдиреЛрдЯ: рдпрджрд┐ рдЖрдк ES7 рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ async рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ async рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб transpiling, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ async.asyncify ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

  1. рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдпрд╣реАрдВ рдореИрдВ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ worker рдЖрдк async.queue рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП launch , login , рдФрд░ goToMonth рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ worker рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

const q = async.queue(function(task, callback) {
  async.series([
    async function() {
      await aida.launch(task.foo, task.boo);
    },
    async function() {
      await aida.login(task.baz);
    },
    // etc...
  ], callback);
}, 1);

// on a websocket event
q.push({foo: websocketData.foo, bar: websocketData.bar, baz: websocketData.baz});

рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рд╣реИрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const q = async.queue(async function(task) {
  await task.func.apply(null, task.args);
}, 1);

// on a websocket event
q.push({func: aida.launch, args: [websocketData.foo, websocketData.bar]});
q.push({func: aida.login, args: [websocketData.baz]});
q.push({func: aida.goToMonth, args: []});

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред

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

рд╣рд╛рдп @codeofsumit , рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдВрддрд┐рдо рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдЖрдк рдХрд╛рд░реНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореЗрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдзрдХреНрдХрд╛ queue рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛ queue ред рджреЗрдЦреЗрдВ QueueObject рдбреЙрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП q.push ред рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

q.push(aida.launch);
q.push(aida.login);
q.push(aida.goToMonth);

рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ concurrency рдХрд╛ 1 , launch рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА login рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреАред

@hargasinski рдореИрдВрдиреЗ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рджреЛ рдирдП рдкреНрд░рд╢реНрди

  1. рдХрддрд╛рд░ рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдкрд╣рд▓реЗ рдзрдХреНрдХрд╛ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛
  2. рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@codeofsumit рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдереЛрдбрд╝реА рдЧреБрдорд░рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдереА, рдореБрдЭреЗ queue рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

  1. рдХрддрд╛рд░ рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдкрд╣рд▓реЗ рдзрдХреНрдХрд╛ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛

queue рдХреЛ task рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдЬрдм рдЖрдк q.push рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдЪрд▓рд╛ред

рд╕рд╛рдЗрдб рдиреЛрдЯ: рдпрджрд┐ рдЖрдк ES7 рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ async рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ async рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб transpiling, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореЗрдВ рд▓рдкреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ async.asyncify ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

  1. рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдпрд╣реАрдВ рдореИрдВ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ worker рдЖрдк async.queue рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП launch , login , рдФрд░ goToMonth рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ worker рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

const q = async.queue(function(task, callback) {
  async.series([
    async function() {
      await aida.launch(task.foo, task.boo);
    },
    async function() {
      await aida.login(task.baz);
    },
    // etc...
  ], callback);
}, 1);

// on a websocket event
q.push({foo: websocketData.foo, bar: websocketData.bar, baz: websocketData.baz});

рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рд╣реИрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const q = async.queue(async function(task) {
  await task.func.apply(null, task.args);
}, 1);

// on a websocket event
q.push({func: aida.launch, args: [websocketData.foo, websocketData.bar]});
q.push({func: aida.login, args: [websocketData.baz]});
q.push({func: aida.goToMonth, args: []});

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдЙрд╣ рдпрд╣ рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдЗрддрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ!

рд╕рд╛рде рд╣реА: рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдРрд╕реА рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдЦреБрд▓реЗ рдореБрджреНрджреЗ рдирд╣реАрдВ)ред ЁЯСН рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА - рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЛ!

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

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

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

alexpusch picture alexpusch  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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