рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдбрд┐рдЬрд╛рдЗрди: рддрд╛рдХрдд, рдиреБрдХрд╕рд╛рди, рдФрд░ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди

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

рдЫрд╡рд┐

рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХреА рддрд╛рдХрдд


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдЬреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЛ рд╢реИрд▓реА рдХреЗ рд╕рдордХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреА рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╛рджреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред

// async/await async getBooksByAuthorWithAwait(authorId) {  const books = await bookModel.fetchAll();  return books.filter(b => b.authorId === authorId); } //  getBooksByAuthorWithPromise(authorId) {  return bookModel.fetchAll()    .then(books => books.filter(b => b.authorId === authorId)); } 

рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╛ async / рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк await рдХреАрд╡рд░реНрдб рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реЗрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рдЪрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╛ рдкрд╛рдпрдерди рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЖрдХрд░реНрд╖рдг рди рдХреЗрд╡рд▓ рдмреЗрд╣рддрд░ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрдВрддреНрд░, рдЙрддреНрдХреГрд╖реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХрд╛ рдЖрдирдВрдж рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рддреЛ, рдЖрдЬ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рд╕рднреА рдкреНрд░рдореБрдЦ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред


рд╕рднреА рдкреНрд░рдореБрдЦ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ ( caniuse.com )

рд╕рдорд░реНрдерди рдХреЗ рдЗрд╕ рд╕реНрддрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдХрдореА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝рд╛ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдФрд░ рдЬрдм рд╕реНрдЯреЗрдк рдУрд╡рд░ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЬрдм рдбрд┐рдмрдЧрд░ рд▓рд╛рдЗрди рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ await рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ bookModel.fetchAll() рдЗрдВрддрдЬрд╛рд░ рдХрд░ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╣рд╛рдБ .filter() рдХрдорд╛рдВрдб рдХреЛ рд▓рд╛рдЗрди рдкрд░ .filter() ! рдЗрд╕ рддрд░рд╣ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд╛рджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддреА рд╣реИред рдпрд╣рд╛рдВ, рд╕рдорд╛рди рдХреЛрдб рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ .filter() рдореЗрдВ рдПрдХ рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ред рдбреАрдмрдЧрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд░реЗрдЦрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рдПрдЧрд╛

рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рддрдВрддреНрд░ рдХреА рдПрдХ рдФрд░ рддрд╛рдХрдд, рдЬреЛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдВрдЪ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣рд╛рдВ async рдХреАрд╡рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ getBooksByAuthorWithAwait() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рдПрдХ рд╡рд╛рджрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ getBooksByAuthorWithAwait().then(...) рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ getBooksByAuthorWithAwait().then(...) рдпрд╛ await getBooksByAuthorWithAwait() рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ):

 getBooksByAuthorWithPromise(authorId) { if (!authorId) {   return null; } return bookModel.fetchAll()   .then(books => books.filter(b => b.authorId === authorId)); } } 

рдпрд╣рд╛рдБ getBooksByAuthorWithPromise() рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ, рдпрд╛, рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ - null ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдпрд╣рд╛рдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ .then() рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЬрдм async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрд╕рдВрднрд╡ рд╣реИрдВред

Async / рдЗрдВрддрдЬрд╛рд░ рдХреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдХреБрдЫ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ, рдПрд╕рд┐рдВрдХреНрд╕ / рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреА рддреБрд▓рдирд╛ рд╡рд╛рджреЛрдВ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде, рдореИрдВ рдЦреБрдж рдХреЛ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВред Async / рдЗрдВрддрдЬрд╛рд░ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдореЗрдВ рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рд╡рд╛рджреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдареАрдХ рд╕реЗ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЖрдкрдХреЛ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ getBooksByAuthorWithAwait() рдФрд░ getBooksByAuthorWithPromises() рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реЗ рди рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рднреА рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ getBooksByAuthorWithAwait() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдпрд╣рд╛рдВ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдирдП рдбрд┐рдЬрд╛рдЗрди рдХреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдПрдХ рднреНрд░рд╛рдордХ рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреАрд╡рд░реНрдб рдХрд╛ await рд╣реИ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

Async / рдЗрдВрддрдЬрд╛рд░ рдХреА рдиреБрдХрд╕рд╛рди


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдХреЗ рддрд░реНрдХрд╣реАрди рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ await рдХреАрд╡рд░реНрдб рдХреЛрдб рдХреЛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬреИрд╕рд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреЛрдб рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 async getBooksAndAuthor(authorId) { const books = await bookModel.fetchAll(); const author = await authorModel.fetch(authorId); return {   author,   books: books.filter(book => book.authorId === authorId), }; } 

рддрд░реНрдХ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдпрд╣ рд╕рдВрд╣рд┐рддрд╛ рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

  1. рд╕рд┐рд╕реНрдЯрдо рдкреБрдХрд╛рд░ рдХрд╛ await bookModel.fetchAll() рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ .fetchAll() рдХрдорд╛рдВрдб рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  2. bookModel.fetchAll() await authorModel.fetch(authorId) рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ authorModel.fetch(authorId) рдкрд░ рдХреЙрд▓ bookModel.fetchAll() рдХреЛ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рджреЛ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рдЗрди рджреЛрдиреЛрдВ рдХреЙрд▓реЛрдВ рдореЗрдВ await рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрди рджреЛрдиреЛрдВ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдХреБрд▓ рд╕рдордп рдЙрдирдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ:

 async getBooksAndAuthor(authorId) { const bookPromise = bookModel.fetchAll(); const authorPromise = authorModel.fetch(authorId); const book = await bookPromise; const author = await authorPromise; return {   author,   books: books.filter(book => book.authorId === authorId), }; } 

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрднреА рднреА рдмрджрддрд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рджреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 async getAuthors(authorIds) { //  ,     // const authors = _.map( //   authorIds, //   id => await authorModel.fetch(id)); //   const promises = _.map(authorIds, id => authorModel.fetch(id)); const authors = await Promise.all(promises); } 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддрдм, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдкрд╣рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдФрд░ рдлрд┐рд░ await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд▓рд┐рдЦреЗрдВред рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реАрдзреЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдлрд┐рд░ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рджрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде - рдлрд┐рд░ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рджрд╛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдХреНрд░рдорд╢рдГ .catch() рдФрд░ .catch() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, async / рдкреНрд░рддреАрдХреНрд╖рд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

тЦН рдХреЛрд╢рд┐рд╢ рдХрд░реЛ / рдирд┐рд░реНрдорд╛рдг рдкрдХрдбрд╝реЛ


Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдЯреНрд░рд╛рдЗ / рдХреИрдЪ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рд╣реИред рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╡рд╛рджрд╛ рдЦрд╛рд░рд┐рдЬ рд╣реЛрдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 class BookModel { fetchAll() {   return new Promise((resolve, reject) => {     window.setTimeout(() => { reject({'error': 400}) }, 1000);   }); } } // async/await async getBooksByAuthorWithAwait(authorId) { try { const books = await bookModel.fetchAll(); } catch (error) { console.log(error);    // { "error": 400 } } 

catch рдореЗрдВ рдкрдХрдбрд╝реА рдЧрдИ рддреНрд░реБрдЯрд┐ рдмрд┐рд▓рдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдореВрд▓реНрдп рд╣реИ рдЬрдм рд╡рд╛рджрд╛ рдЦрд╛рд░рд┐рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЖрдк рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП catch рдореЗрдВ return рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ return undefined рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛;
  • рдЖрдк рдмрд╕ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд┐рдлрд▓ рд╣реБрдЖ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереАред рдЖрдк throw error; рдЬреИрд╕реА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдПрдХ рдПрд░рд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ throw error; , рдЬреЛ рдЖрдкрдХреЛ рд╡рд╛рджреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ async getBooksByAuthorWithAwait() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕реЗ getBooksByAuthorWithAwait().then(...).catch(error => ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ getBooksByAuthorWithAwait().then(...).catch(error => ...) рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдПрд░рд░ рдХреЛ Error рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ throw new Error(error) рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╕рдордп, рдкреВрд░реНрдг рдХреЙрд▓ рд╕реНрдЯреИрдХ рджреЗрдЦреЗрдВред
  • рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ return Promise.reject(error) ред return Promise.reject(error) рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ throw error рдХрдорд╛рдВрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред

рдпрд╣рд╛рдБ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдн рд╣реИрдВ:

  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдЙрдкрдХрд░рдг рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд╡реЗ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ, рдЬреИрд╕реЗ C ++ рдпрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдЗ / рдХреИрдЪ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗред
  • рдЖрдк рдПрдХ рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдИ рдкреНрд░рддреАрдХреНрд╖рд╛-рдХреЙрд▓ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИред рдЪреВрдБрдХрд┐ рдЯреНрд░рд╛рдпрд▓ рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ / рдкрдХрдбрд╝рдиреЗ рдХрд╛ try рд╣реИ, рдЬреЛ рдЕрдкрд╡рд╛рдж рд╡рд╛рджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рднреА catch рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

 class BookModel { fetchAll() {   cb();    //    ,   `cb`  ,       return fetch('/books'); } } try { bookModel.fetchAll(); } catch(error) { console.log(error);  //       "cb is not defined" } 

рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк ReferenceError: cb is not defined рджреЗрдЦреЗрдВрдЧреЗ ReferenceError: cb is not defined рдХрдВрд╕реЛрд▓ рдореЗрдВ ReferenceError: cb is not defined рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ ReferenceError: cb is not defined рд╣реИред рдпрд╣ рд╕рдВрджреЗрд╢ console.log() catch рд╕реЗ рдХрдорд╛рдВрдб console.log() рджреНрд╡рд╛рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣реА рдирд╣реАрдВред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЙрд▓рд┐рдВрдЧ bookModel.fetchAll(); рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЧрд╣рд░реА рдЫрд┐рдкреА рдФрд░ рдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ "рдирд┐рдЧрд▓" рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

ред рджреЛ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдлрдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди


рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдЕрдЧрд▓реЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдЧреЛ рд╣реИред рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдлрд┐рд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 [err, user] = await to(UserModel.findById(1)); 

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреЗрд╢ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред

.Use рдХрд╛ .catch


рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рддрд░реАрдХрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдХрд╛ рдЙрдкрдпреЛрдЧ .catch() ред .catch() ред

рд╕реЛрдЪрд┐рдП рдХрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╛рджрд╛ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рдХрдорд╛рдВрдб promise.catch() рднреА рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 // books   undefined   , //    catch     let books = await bookModel.fetchAll() .catch((error) => { console.log(error); }); 

рджреЛ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВ:

  • рдпрд╣ рд╡рд╛рджреЛрдВ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рд╡рд╛рджреЛрдВ рдХреЗ рдХрд╛рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рд╕рдорд╛рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо


Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг, рдЬрд┐рд╕реЗ ES7 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдВрддреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реИред рдпрд╣ рд░реАрдбрд┐рдВрдЧ рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА рдврдВрдЧ рд╕реЗ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рджреЛрдВ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ async / рдЗрдВрддрдЬрд╛рд░ рдмрд╕ рд╡рд╛рджреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рд╡рд╛рдХреНрдпрдЧрдд рдЪреАрдиреА" рд╣реИред

рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдиреЗ рдЖрдкрдХреЛ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рдФрд░ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ рд╡рд╣ рдЖрдкрдХреЛ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi414373/


All Articles