Knex: рдорд╛рдирдХ ES6 рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЬреБрд▓ре░ 2016  ┬╖  80рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рдиреЛрдб v6 рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╕рдордп, рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдорд╛рдирдХ ES6 рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рдмреНрд▓реВрдмрд░реНрдб рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ)?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдорд┐рд╕-рдХреНрдпреВ рдкреИрдХреЗрдЬ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЪреВрдХ рдХрд░рддрд╛ рд╣реИ,

https://www.npmjs.com/package/promise-queue

рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ Queue.configure(require('vow').Promise); . рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рддреЛ рдХреНрдпрд╛ рдпрд╣ рдкреИрдХреЗрдЬ рдЗрд╕реА рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

:+1: рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдПред

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

рдЬрд┐рдЬреНрдЮрд╛рд╕реБ: рдЖрдк рдПрдХ рддреЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдзреАрдореЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдиреЛрдб рд╕реНрдкреАрдб рдореЗрдВ рдПрдХ рдХрд╛рд░рдХ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИ?

@johanneslumpe рдпрд╣ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд╛рд░рдХ рд╣реИ, knex рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ Promise рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдП+ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА Promise рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ bluebird рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдЙрд╕рдХреЗ рдмрд╛рдж рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ Promise рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ knex рдЬреИрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡реНрдпрд░реНрде рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ knex рдХрд╛ рдХреЛрдбрдмреЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╡рд╛рджрд╛ .js рдлрд╝рд╛рдЗрд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрднреА рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдмрд╢рд░реНрддреЗ рдПрдкреАрдЖрдИ рд╕рдорд╛рди _ (рдЬреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ?)_ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред

рдпрд╣ рд╕рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ; рдиреЛрдб V6+ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рд╕реЗ рдХрдо рддреГрддреАрдп рдкрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдВред

рдЬрд┐рдЬреНрдЮрд╛рд╕реБ: рдЖрдк рдПрдХ рддреЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдзреАрдореЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЕрддреАрдд рдореЗрдВ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╛ 6 рдорд╣реАрдиреЗ рдмрд╛рдж рдХреИрд╕рд╛ рд░рд╣реЗрдЧрд╛? (рдореИрдВрдиреЗ рдХреБрдЫ рдЦреЛрдЬ рдХреА рдФрд░ рдХреЗрд╡рд▓ 2015 рдХреЗ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рд╛рд▓ рдХреА рддреБрд▓рдирд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдХреБрдЫ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ)
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ ES6 рдорд╛рдирдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдпрд╛ V8 рдХреА рдХреЛрд░ рдЯреАрдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рд╕реЗ рдЕрдВрдзреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдВрдЧрдд рд╣реИрдВ, рд╡реЗ рдХреБрдЫ рдХреЛрдб рдЙрдзрд╛рд░ рднреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ; рдпрд╛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рд╕рдордп рджреЗрдВ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдмрд┐рд▓реНрдЯрд┐рди рдкреНрд░реЙрдорд┐рд╕ рддреЗрдЬ рдФрд░ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдореЗрдЬрд╝реЕрди рдХрд╛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕-рдПрд╕рдбреАрдХреЗ рджреЗрдЦреЗрдВ: рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд┐рд╕реА рднреА рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ; рдЬрдмрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╕рдВрджреАрджрд╛ рдкреНрд░реЙрдорд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдВ

http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-making-requests.html#Support_for_Promises

рдпрд╣ рд╕рдм рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ

рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреНрдиреЗрдХреНрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ .timeout , .tap , .reduce , .map рдЖрджрд┐ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ES6 рд╡рд╛рджреЛрдВ рдореЗрдВред

рдореБрдЭреЗ ES6 рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ Knex Promise рд▓реЗрддрд╛ рд╣реИред рдмреИрдХ рд╕рдВрдЧрддрддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдПрдЧреА:

const Promise = require('bluebird');
const knex = Knex(myKnexConfig, Promise);

рд╢рд╛рдпрдж рд╣рдо рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП Promise.prototype рдкрд░ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╢рд░реНрдд рдЙрдкрдирд╛рдо map , filter рдЖрджрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реВрдЪреА рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдХрд┐ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд╛рджреЗ рдПрдХ рдмреНрд▓реВрдмрд░реНрдб рд╣реИрдВ (рд╕рд╢рд░реНрдд catch , рдЖрджрд┐ рдХреЗ рд▓рд┐рдП)ред

рдореИрдВ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдиреЛрдб рдореЗрдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рднреВрдорд┐ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред

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

@google-cloud рдФрд░ рдХрдИ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддрд░рд╣, рдЖрдк рдореВрд▓ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд╛рджрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

https://googlecloudplatform.github.io/google-cloud-node/#/docs/google -cloud/

var gcloud = require('google-cloud')({
  promise: require('bluebird')
});

@tgriesser рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рдФрд░ рдХрд╛рд░реНрдмрди рджреЛрдиреЛрдВ рдореЗрдВ async / await рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ/рдореВрд▓ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ ( рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдореВрд▓ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ) рдХреНрдпрд╛ рдпрд╣ рдХреЛрдИ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ?

рдпрджрд┐ рдореВрд▓ рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ Knex рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░рдбрд╛рд░ рдкрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@malexdev async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореВрд▓ рд╡рд╛рджреЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ knex рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ await рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд╛рджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛/рд▓рд╛рдн рд╣реИ (рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░)?

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

@elhigu рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ TSLint рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ await рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рднреА Knex рдХреЙрд▓ рдХреЛ Promise.resolve() рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдиреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдореБрджреНрджрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрдо рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ @ c0b рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдХрднреА рднреА рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрд╛рдо рд╣реЛрдЧрд╛, рдпрд╣реА рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЦреБрд╢ рд╣реВрдВ, рдЕрдЧрд░ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ Knex рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдпрд╣рд╛рдБ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЖрдпрд╛ рд╣реВрдБ - рдореИрдВ рдЕрдкрдиреЗ рдорд▓реНрдЯреА-рд╕реНрдЯреЛрд░реЗрдЬ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП SQL рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ Knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдФрд░ рдЬрдм рдореИрдВ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдмрдирд╛рдо рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реВрдБ, рддреЛ рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ knex рдкрд░ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ред рдореИрдВ рдореВрд▓ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрдХреНрд╕ рдереИрдиреЗрдмрд▓реНрд╕ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рддрд╛ рд╣реВрдВ (рдореИрдВ рдХрд┐рд╕реА рднреА рдмреНрд▓реВрдмрд░реНрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛), рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИрдЬрдм рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ.

рдпрд╣ рдпрд╣рд╛рдВ рджреЛ рддрд░рд╣ рдХреЗ рдЧрд╣рд░реЗ рд╕реНрддрд░ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рд╡рд╛рджреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ knex рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ (рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ - рдореИрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдЕрдиреБрдмрдВрдз рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдмреНрд▓реВрдмрд░реНрдб рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рджрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕рд╛рдорд╛рди рд╣реИ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ return Promise.resolve(bluebirdthing) рдХрд╛ рдЧреБрдЪреНрдЫрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕ рд╣рд┐рдореНрдордд рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдФрд░ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ - рдХреНрдпрд╛ рдЖрдк рд╣реЛрдВрдЧреЗ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛? рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ @elhigu рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ - рдХреЛрдб-рдкреБрдирд░реНрд▓реЗрдЦрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдореЗрдВ рдЬреЛ рднреА рд╡рд╛рджрд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕рдм async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдлреИрдВрд╕реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ any рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝реНрд▓реИрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯ рд░рд╣рд╛ рд╣реВрдВ рдХреЛрдбрдмреНрд░рд╛рдВрдЪ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрдЬрд╛рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереЗ)ред

@ericeslinger рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛, рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб рдФрд░ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдбреЗрдврд╝ рд╕рд╛рд▓ рд╕реЗ рдорд┐рд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ ...

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

рдХреМрди рд╕рд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдФрд░ рдХреНрдпрд╛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдирдкреАрдПрдо рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЬреАрдердм рд░реЗрдкреЛред

рдпрд╣ рдпрд╣рд╛рдВ рджреЛ рддрд░рд╣ рдХреЗ рдЧрд╣рд░реЗ рд╕реНрддрд░ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рд╡рд╛рджреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ knex рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ (рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ - рдореИрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдЕрдиреБрдмрдВрдз рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдПрдХ рдмреНрд▓реВрдмрд░реНрдб рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рдПрдХ рд╡рд╛рджрд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рджрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕рд╛рдорд╛рди рд╣реИ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рд╡рд╛рдкрд╕реА рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рд╣реИред рд╣рд░ рдЬрдЧрд╣ рд╣рд▓ рдХрд░реЗрдВ (рдмреНрд▓реВрдмрд░реНрдбрд┐рдВрдЧ)ред

рдХреНрдпрд╛ рд╡реЗ knex рдЯрд╛рдЗрдкрд┐рдВрдЧ npm рд╕реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдПрдирдкреАрдПрдо рд╕реЗ рд╣реИрдВ? рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ? рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЕрд▓рдЧ рдмреНрд▓реВрдмрд░реНрдб рдкреНрд░рдХрд╛рд░ рд╣реИ рддреЛ рдЗрд╕реЗ рдореВрд▓ рд╡рд╛рджреЗ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдкреАрдЖрдИ рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдареАрдХ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рд╡рд┐рд╡рд░рдг рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рдЯреВрдЯреА рд╣реБрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдФрд░ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ knex рдХреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ)ред

рдореИрдВ @types/knex рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд░реЗрдкреЛ рд╕реЗ рдЕрдкрдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрддреА рд╣реИ @types/bluebird , рдФрд░ рд╕рднреА knex рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛:

function mungeData(v: any): DataItem {} 
function foo(): Promise<DataItem[]> {
  return knex('data').select()
  .then((rows) => rows.map(row => mungeData(row)))
} // error, cannot return Bluebird<DataItem[]> as Promise<DataItem[]>

рдЗрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ knex.select().then() рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрди рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрдзрд┐рдХ рдмреНрд▓реВрдмрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ return foo as Promise<any>() рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдЬрдм рдлреВ рдмреНрд▓реВрдмрд░реНрдб рд╣реИрд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.4 рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реВрдмрд░реНрдбреНрд╕ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ (рдЙрдирдХреЗ рдЕрдиреБрд╕рд╛рд░ [Symbol.toStringTag] рдХреА рдХрдореА рд╣реИ , рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЬрдмрд░рджрд╕реНрддреА рдХрд░рдирд╛ рдПрдХ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА)ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдБ

function bar(): Promise<DataItem[]> {
  return Promise.resolve<DataItem[]>(foo())
}

рдпрд╛ рджреЗрд╢реА Promise.resolve() рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЙрд▓реНрд╕ рдХреЛ knex рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░рдХреАрдмреЗрдВ рдХрд░реЗрдВред рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореЗрд░реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдЕрдкрдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЕрдВрджрд░ knex рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдХрд▓ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ @types/knex рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ - рдореИрдВ рдХреЗрд╡рд▓ any рдХреЗ рд░реВрдк рдореЗрдВ knex рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХреЛрдб рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП), рдпрд╣ рдмрд╕ рд╣реИ

@elhigu : рдореБрджреНрджрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ Promise<[type]> рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐ JS рд╕реНрдкреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
Knex Bluebird<[type]> рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рддреА рд╣реИред

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

рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЭреВрда рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрдиреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Bluebird s рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд░реБрдЪрд┐ рдирд╣реАрдВред
рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣реА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд▓реМрдЯ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ Bluebird рд▓реМрдЯрд╛рддреЗ рд╕рдордп рдЬрд┐рд╕реЗ $#$5$# Promise рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдк Bluebird рдЯрд╛рдЗрдк Promise рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред
рдРрд╕реА рдХрдИ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ @ericeslinger рдиреЗ any рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ Promise.resolve() рдореЗрдВ рд▓рдкреЗрдЯрдХрд░) рд▓реЗрдХрд┐рди рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд╛рд▓реЗрдВ рд╣рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЦреЛ рджреЗрддреА рд╣реИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдХрдо рд╕реЗ рдХрдо рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ "рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╣рдо рд╡рд╛рджреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИрдВ"ред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдорджрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдирдиреЗ рдХреЗ рдмрдЬрд╛рдп "рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдореИрдВ рдпрд╣ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рджреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ / @ericeslinger / @ c0b рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдпрд╛ рддреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХреВрдВ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдкрд░ рдпрд╛ рдХреНрдпрд╛ред

@malexdev @ericeslinger рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Promise рд╕реЗ рдЖрдкрдХреА рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣реА рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЬреЛ рд╡рд╛рджрд╛ <> рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :(

@ericeslinger рд╡реИрд╕реЗ рднреА рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдЖрдк async рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, @types/bluebird рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ ES2015 рдпрд╛ ESNEXT рдореЗрдВ рд╕рдВрдХрд▓рд┐рддред

import * as Bluebird from 'bluebird';

// declaring function async converts bluebird implicitly to native Promise
async function asyncReturningPromise(): Promise<string> {
    const blueBirdPromise = new Bluebird<string>((resolve, reject) => { 
        resolve('yay asyncReturningPromise');    
    });
    return blueBirdPromise;
}

// main func to run the code using async / await
Bluebird.resolve().then(async () => {
    console.log("await function returning promise (bluebird)", await asyncReturningPromise());

    const blueBird = new Bluebird((resolve, reject) => { resolve(); });
    const returnedFromAsync = asyncReturningPromise();

    console.log("Bluebird instanceof Promise:", blueBird instanceof Promise);
    console.log("async retval instanceof Promise:", returnedFromAsync instanceof Promise);
});

рдЖрдЙрдЯрдкреБрдЯ:

await function returning promise (bluebird) yay asyncReturningPromise
Bluebird instanceof Promise: false
async retval instanceof Promise: true

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

@malexdev

рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЭреВрда рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрдиреЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд░реБрдЪрд┐ рдирд╣реАрдВред
рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣реА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд▓реМрдЯ рд░рд╣реЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИ:

class FakePromise<T> implements Promise<T>  {
    [Symbol.toStringTag]: "Promise";
    then<TResult1, TResult2>(onfulfilled?: (value: T) => TResult1 | PromiseLike<TResult1> | null | undefined, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2> | null | undefined): Promise<TResult1 | TResult2> {
        return new Promise((resolve, reject) => { resolve('Im totally broken and fake!); });
    }
    catch<TResult>(onrejected?: (reason: any) => TResult | PromiseLike<TResult> | null | undefined): Promise<T | TResult> {
        throw new Error("Method not implemented.");
    }
}

// this works and  fake promise instance has nothing to do with native promise
function returningPromiseInterface(): Promise<string> {
    const fakePromise = new FakePromise<string>();
    return fakePromise;
}

// compiling this fails, because looks like Bluebird actually doesn't implement Promise interface correctly
function asyncReturningPromise(): Promise<string> {
    const blueBirdPromise = new Bluebird<string>((resolve, reject) => { 
        resolve('yay asyncReturningPromise');    
    });
    return blueBirdPromise;
}

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рднреА рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдореВрд▓ рд╡рд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг, рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реМрдЯрд╛рдпрд╛ рд╣реИред

рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рд▓реМрдЯрд╛рддреЗ рд╕рдордп, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдк рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред
рдРрд╕реА рдХрдИ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ @ericeslinger рдиреЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ Promise.resolve() рдореЗрдВ рд▓рдкреЗрдЯрдХрд░) рд▓реЗрдХрд┐рди рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рддрд░рдХреАрдмреЗрдВ рд╣рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╣реБрдд рдХреБрдЫ рдЦреЛ рджреЗрддреА рд╣реИрдВред

рдореБрдЭреЗ рдЦрд░рд╛рдм рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд╛рд▓/рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реЛрдЧреАред

рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдХрдо рд╕реЗ рдХрдо рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ "рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╣рдо рд╡рд╛рджреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИрдВ"ред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдорджрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдирдиреЗ рдХреЗ рдмрдЬрд╛рдп "рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдореИрдВ рдпрд╣ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рджреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ / @ericeslinger / @ c0b рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдпрд╛ рддреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХреВрдВ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдкрд░ рдпрд╛ рдХреНрдпрд╛ред

рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :) рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП knex рдХреЛ рдмрджрд▓рдирд╛ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЗрд╕реЗ @tgriesser рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрджрд▓рд╛рд╡ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЗрди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ (рдХреНрдпреЛрдВ рдмреНрд▓реВрдмрд░реНрдб рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдореБрдЭреЗ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?), knex рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

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

:+1: рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдПред

@elhigu :

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ

рдХрд╛рдлреА рдЙрдЪрд┐рддред рдореИрдВ рдЕрднреА рднреА рдЕрдкрдиреА рд░рд╛рдп рдкрд░ рдХрд╛рдпрдо рд╣реВрдВ рдХрд┐ рдХрдо рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЯреВрдЯреА рд╣реБрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

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

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рджреЛрдиреЛрдВ рдЗрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреЗ рдореБрджреНрджреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд░реНрдж рдмрд┐рдВрджреБ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдиреЛрдб рднреВрдорд┐ рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдЙрдкрдпреЛрдЧрд┐рддрд╛ fns ( map , reduce , tap , bind , return ) рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ knex рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ "рдмрд╣рд┐рд╖реНрдХреГрдд" рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЙрд╕ рд╡рд┐рд▓рдп рдХреЗ рд╕рд╛рде, рд╣рдо рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ ( toBluebird рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдкреНрд░реЙрдорд┐рд╕ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдмреИрдВрдбрд╡рд┐рдбреНрде рд╣реИ рддреЛ рд╡рд╣ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдореИрдВ рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ:

  • [ ] рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ ( tap , map , reduce , bind , return ) рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдЬреЛрдбрд╝реЗрдВред
  • [ ] рдПрдХ .toBluebird() рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкрде рд╣реЛрдЧрд╛ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╡реЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рднреА рдХреЙрд▓реЛрдВ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦреЛрдЬ/рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)
  • [ ] рдПрдХ рдмрд╛рд░ рдпрд╣ рд╡рд┐рд▓рдп/рдирдИ рд░рд┐рд▓реАрдЬ рдХрдЯ (0.15) рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • [ ] рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдо рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд░рд▓ рдПрдкреАрдЖрдИ рдЕрдВрддрддрдГ рдореВрд▓ рд╡рд╛рджреЗ рдФрд░ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдкрд░ рд╢реЙрдЯ рд▓реЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ Knex рдЕрдкрдиреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛? рд╣рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдСрдЯреЛрдЬреЗрдирд░реЗрдЯреЗрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрднреА рднреА рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рдВрдЯреЗ рдХреЛ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛:
https://github.com/tgriesser/knex/pull/2523/files

2016 рдХреА рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВ:

рдЬрд┐рдЬреНрдЮрд╛рд╕реБ: рдЖрдк рдПрдХ рддреЗрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдзреАрдореЗ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдХрдорд╛рд▓ рд╣реИ 2 рд╕рд╛рд▓ рдореЗрдВ рдХрд┐рддрдирд╛ рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рд▓реМрдЯрд╛рддреЗ рд╕рдордп, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдк рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред

@malexdev рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдкреНрд░рд╡рд╛рд╣ рдирд╛рдордорд╛рддреНрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛) рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдкреНрд░рдХрд╛рд░ Promise рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╣ Promise рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ рдЪрд╛рд╣реЗ рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ extends рд╣реЛ implements рдпрд╣ рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд╣рд▓рд╛ рдХрджрдо рдмреНрд▓реВрдмрд░реНрдб рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдиреЗрдХреНрд╕ рдХреЗ рднреАрддрд░ рдХрд╛рд░рдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЕрднреА рддрдХ рд╣рдЯрд╛рдПрдВ рдирд╣реАрдВ)ред рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рдХрд╕реНрдЯрдо рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдЧрд╛ (рдФрд░ рдмреНрд▓реВрдмрд░реНрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдЕрдкрдЧреНрд░реЗрдб рдкрде рджреЗрдВ)ред

рдХреЛрдИ рдЖрдкрддреНрддрд┐ рди рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдкрд╣рд▓реЗ рдЪрд░рдг рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдХрд╛рдо рдорд░ рдЧрдпрд╛ рд╣реИред

@qubyte рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдХреНрд░рд┐рдп рдкреНрд░рдпрд╛рд╕ рд╣реИ, рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ рдХрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдареАрдХред рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЫреЛрдЯреЗ-рд╕реЗ-рд╕рдВрднрд╡ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реВрдБрдЧрд╛ред

@tgriesser рдХреЛрдИ рд░рд╛рдп рдЬрдм рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдХрднреА)? рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдЕрдкреНрд░реИрд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд╕рдордп рдХреА рддрд░рд╣ рд▓рдЧреЗрдЧрд╛ рдЬрдм рдиреЛрдб 6 рдПрд▓рдЯреАрдПрд╕ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред

2018 рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА:

рдиреЛрдб 10 рдореЗрдВ promises-native-async-await рдХрд╛ рдкреНрд░рджрд░реНрд╢рди promises-bluebird рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рд╕рдВрджрд░реНрдн: https://github.com/petkaantonov/bluebird/tree/master/benchmark

рдЗрд╕рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдЕрдм рдмреНрд▓реВрдмрд░реНрдб рд░рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рджреЗ-рдореВрд▓-async-рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рд╣реИ

2016 рдореЗрдВ рдореЗрд░рд╛ рднреА рдпрд╣реА рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдерд╛ рдХрд┐ рдореВрд▓ рддрд░реАрдХреЗ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ Nodejs рд╕рдореБрджрд╛рдп рдХрд╛ рдореВрд▓ рд╣реИ, рдЗрд╕рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдХрд┐рд╕реА рднреА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ

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

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ?

@cfanoulis рд╡рд╣реА рдЕрднреА рднреА рдЦрдбрд╝рд╛ рд╣реИред рдЬрдм рдЕрдкреНрд░реИрд▓ рдЖрддрд╛ рд╣реИ, рд╣рдо рдиреЛрдб 6 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЛрдИ 2019 рдЕрдкрдбреЗрдЯ? /cc рдХреБрдЫ рдореБрдЦреНрдп рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдпрд╛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдпрд╛ рдХрд┐рд╕реА рдХреЛ рднреА @here рдЬреЛ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ: @johanneslumpe @tgriesser @wubzz @elhigu https://github.com/tgriesser/knex/graphs/contributors?type=c&from=2018-01 рд╕реЗ-

рджреВрд╕рд░реА рдУрд░, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдореБрджрд╛рдп рдПрдХ рдРрд╕реА рдЧрддрд┐рд╢реАрд▓, рдЬреАрд╡рдВрдд рдФрд░ рдХрднреА-рдХрднреА рдХреНрд░реВрд░ рджреБрдирд┐рдпрд╛ рд╣реИ, рд╣рд░ 3 рдпрд╛ 2 рд╕рд╛рд▓ (рдпрд╛ рдЗрд╕рд╕реЗ рднреА рддреЗрдЬ) рдХреБрдЫ рдРрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдереЗ, рдЧреНрд░рдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдЧрд▓реНрдк => рд╡реЗрдмрдкреИрдХ, рдЙрдкрдХрд░рдг, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдврд╛рдВрдЪреЗ рд╣рд░ рд╕реНрддрд░ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдирд╛ рдмрдВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдирдП рдорд╛рдирдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдзреАрдорд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (ES2019 async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдЗрдЯрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ ...)

рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рд╕рд░рд▓ рд╢реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреАрдмреА рдУрдЖрд░рдПрдо рд╕реНрддрд░ рдкрд░ рднреА рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЯрд╛рдЗрдкрдУрдЖрд░рдПрдо рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... (рдореИрдВ рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд░реБрдХрддрд╛ рд╣реВрдВ ...)
https://bestofjs.org/tags/db
https://bestofjs.org/projects/typeorm

@ c0b рдХреЛ cc рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдорд┐рд▓рддреЗ рд╣реИрдВред @kibertoad рдиреЗ рдЕрдкрдиреА рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреЛ рдХреБрдЫ рдХрд╣рд╛ рдерд╛, рд╡рд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдХрд╣рд╛ ... рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рднреА knex рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ async рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ / ES2019 рдХреА рдмреЗрд╣рддрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ knex рдПрдХ ORM рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рдЯрд┐рдкреНрдкрдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдереА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рдУрдЖрд░рдПрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрддреНрддрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЬреЗрдПрд╕ред рдЗрд╕реЗ knex рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕реВрддреНрд░ рд╣реИ https://github.com/Vincit/objection.js/issues/1069

рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕ knex рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА ORM рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓реАрдирд░ рдХреЛрдб рдмреЗрд╕ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП knex 1.0 рд╢рд╛рдпрдж;)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдЧрд░ knex рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛, рдореЗрд░реЗ рд▓рд┐рдП рдХрдо рдХрд╛рдо: D

рдЙрд╕ рдкрд░ рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ: https://github.com/tgriesser/knex-next

рдмрд╕ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк https://github.com/nodejs/node/issues/22360 рдореЗрдВ async_hooks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред

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

#3227 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдВрдд рдореЗрдВ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рд╡рд╛рд╕ рдореЗрдВ рдорджрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ: рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдХреБрдЫ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ (рд╢рд╛рдпрдж рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ) рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рддрд┐рдерд┐рдпрд╛рдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@chaffeqa рдЬрд▓реНрдж рд╣реА рдХреБрдЫ рдФрд░ рдмрд╛рд░реАрдХ рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛, рдЖрд╕рд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рджреМрд░ рдХреЗ рд▓рд┐рдП #3250 рдЕрдк рдХрд░реЗрдВред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдХреБрдЫ рджреЗрд╢реА-рдЖрдзрд╛рд░рд┐рдд рдХреЗ рд╕рд╛рде bluebird.tap, bluebird.method рдФрд░ bluebird.try рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдХреБрдЫ рд╕рдордп рд╣реИ, рддреЛ рдЖрдк #3250 рд╕реЗ рд╢рд╛рдЦрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╢реЗрд╖ 'рдмреНрд▓реВрдмрд░реНрдб' рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдВ рдЧреИрд░-рдмреЛрд▓реА-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк test:sqlite рдЪрд▓рд╛рдХрд░ рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдорд╛рдиреНрдп рдХрд░ рд╕рдХреЗрдВред

@qubyte рдпрджрд┐ рдЖрдк рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдм рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ!

@kibertoad рдХреНрдпрд╛ рдореИрдВ рдЕрдм async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реВрдВ?

рдЖрдкрдХрд╛ рдорддрд▓рдм knex рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣реИ? рдЬрд╝рд░реВрд░ред рдЕрдкрдиреЛрдВ рдореЗрдВ рддреБрдо рд╣рдореЗрд╢рд╛ рдереЗ :-D

рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдПрдордЖрдИрдП рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдмрдврд╝ рд░рд╣реА рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╡рд╣рд╛рдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдУрдВ рдкрд░ рд▓реВрдк рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: Disposer рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЧрд╣ред

рдЬрдм рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЧрд╣рд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдХреЙрдкреА/рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫреА рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд▓реЗрдиреА рд╣реЛрдЧреАред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдкреВрд░реНрдг рдУрд╡рд░рд╣реЗрдб рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╛рджрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ)ред

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдкреАрдУрд╕реА рдкрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рд╣реИ:

class DisposablePromise extends Promise {

  disposerFunc = null;
  originalResource = null;

  then(onFulfilled, onRejected) {
    const $onFulfilled = this.wrap(onFulfilled);
    return super.then($onFulfilled, onRejected).copyContext(this);
  }

  copyContext(promise) {
    this.disposerFunc = promise.disposerFunc;
    this.originalResource = promise.originalResource;
    return this;
  }

  disposer(disposerFunc) {
    this.disposerFunc = disposerFunc
  }

  isDisposable() {
    return !!this.disposerFunc
  }

  wrap(onFulfilled: any) {
    const $onFulfilled = (result: any) => {
      if (this.disposerFunc && !this.originalResource) {
        this.originalResource = result
      }
      if (result instanceof Promise) {
        return onFulfilled(result);
      } else {
        const res = onFulfilled(result)
        if (this.disposerFunc) {
          this.disposerFunc(this.originalResource)
        }
        return res
      }
    };

    return $onFulfilled;
  }
}

рдФрд░ рджреБрд╕рд░реА:

      var DisposablePromise = function DisposablePromise() {
          var self = DisposablePromise.convert(Promise.resolve());
          return self;
      };
      DisposablePromise.convert = function convert(promise, props) {
          promise.__proto__ = DisposablePromise.prototype;
          return props ? Object.assign(promise, props) : promise;
      };
      DisposablePromise.prototype = Object.create(Promise.prototype);
      DisposablePromise.prototype.constructor = DisposablePromise;
      DisposablePromise.prototype.then = function then(resolve, reject) {
          var returnVal = Promise.prototype.then.call(this, resolve, reject);
          return DisposablePromise.convert(returnVal);
      };
      DisposablePromise.prototype.catch = function _catch(err) {
          var returnVal = Promise.prototype.catch.call(this, err);
          return DisposablePromise.convert(returnVal);
      };
      DisposablePromise.prototype.finally = function finall(obj) {
          var returnVal = Promise.prototype.finally.call(this, obj);
          return DisposablePromise.convert(returnVal);
      };
      DisposablePromise.prototype.disposer = function disposer(disposerFunc) {
        var returnVal = Promise.prototype.finally.call(this, obj);
        return DisposablePromise.convert(returnVal);
      };

рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ред

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

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдХреА рдХреЗ рдХрд╛рдо рдмрд╣реБрдд рд╕реАрдзреЗ рдЖрдЧреЗ рд╣реИрдВред

@chaffeqa Np, рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ!
рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рд▓реЛрдЧ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реЛрдВрдЧреЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕ рдмрд╛рдд рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡реЗ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдКрдкрд░ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдмреНрд▓реВрдмрд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Node 8 рдЕрднреА Node.js рдХрд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Node.js рдбрд╛рдЙрдирд▓реЛрдб рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рддрдХ async iterator-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ DisposablePromise рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Knex рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рдХрдорд┐рдпрд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ? рдЪреВрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд╡рд╛рджрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреНрд▓реВрдмрд░реНрдб рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕ рдореЗрдВ рдХреБрдЫ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ?

@ericeslinger FWIW, TS рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдЕрдм рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд╛рджреЛрдВ рдХреЛ рдЕрдм рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬрдм рджреЗрд╢реА рд╡рд╛рджреЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрднреА рднреА рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдпреЛрдЧрджрд╛рди рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА :)

рдореЗрд╡рд╛ рдореБрдЭреЗ рдЙрддрдирд╛ рд╣реА рд▓рдЧрд╛
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ DisposablePromise рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдЕрднреА рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╣реИред

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ DisposablePromise рдЬреИрд╕реЗ рдХреБрдЫ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ ... рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореБрдЭреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрд╕рд┐рдВрдХ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реИ рд╣рд╛)ред

рдЕрдЧрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдХреЛрдИ рдФрд░ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рд╕реНрдЯреИрдм рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ <3 рдпреВ рд▓реЙрдиреНрдЧрдЯрд╛рдЗрдореНрд╕!

@chaffeqa рдмреНрд▓реВрдмрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХреЗрдВ рдФрд░ рдореВрд▓ рд╡рд╛рджреЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝ рд╕рдХреЗрдВ?

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ ... рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрдереНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреЛ рдКрдкрд░ using рдкрд░ рд▓рд┐рдВрдХ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ) рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╢рд┐рдо рдмрдирд╛рдПрдВред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдХ Bluebird рд╢реИрд▓реА рдХрд╛ рд╡рд╛рджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореВрд▓ рд╡рд╛рджреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕рднреА рдЯреНрд░реЗрд╕рд┐рдВрдЧ + рджреЗрд╢реА рдПрд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ)ред

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

FYI рдХрд░реЗрдВ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ knex рдореЗрдВ usage рдФрд░ .disposer рдХрд╛ рдиреНрдпреВрдирддрдо рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗ?

рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд╛рдпрдХ :)

oooo рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдореБрдЭреЗ https://github.com/petkaantonov/bluebird/issues/1593 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдорд┐рд▓рд╛ рд╣реИ

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

@chaffeqa рдЖрдкрдХрд╛ рдорддрд▓рдм Bluebird.setScheduler(fn => Promise.resolve().then(fn)) рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ?
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд░реВрдкрд╛рдВрддрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ! рдпрджрд┐ рд╣рдо рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмреНрд▓реВрдмрд░реНрдб рдореЗрдВ рдбрд┐рд╕реНрдкреЛрдЬрд▓ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рдЗрди рдкрд░ рдЕрднреА рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:
https://github.com/tgriesser/knex/issues/3257
https://github.com/tgriesser/knex/issues/3286
https://github.com/tgriesser/knex/issues/3256

рдорджрдж рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА!

рдмрд╕ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ async_hooks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рд╕реЗ рдиреЛрдбрдЬ/рдиреЛрдб # 22360 рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди https://github.com/TimBeyer/cls-bluebird рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдХреЗрд╡рд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, Node v8 рдХреЗ рд▓рд┐рдП LTS рдЗрд╕ рд╡рд░реНрд╖ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

@ рдмреЗрд╕реЛрдиреЛрд╡ рд╕рдВрджрд░реНрдн? 10 рд╕реЗ 10 рддрдХ рдЯрдХрд░рд╛рдиреЗ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИ? рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдиреЛрдб 6 рд╕рдорд░реНрдерди рдкрд╣рд▓реЗ рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

рдореИрдВ knex рдХреЛрдб рдЖрдзрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрдВ, рдЬреЛ рдЖрдкрдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЛрдб 10 рдореЗрдВ Promise.finally рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред

рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ: +1:

рдбрд┐рд╕реНрдкреЛрдЬрд░ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреНрдпрд╛ рд╣рдо рд╕рд┐рд░реНрдл рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ?
(рдЬреИрд╕реЗ рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде)

getDisposableConnection(config, cb) {
    const connection = await getConnection(config)

   // user want autodisposable connection
    if (cb) 
      Promise.resolve(cb(connection)).then(() => connection.dispose())
   // user will dispose by himself
   return connection
}

рд╣рдореЗрдВ рдХрд┐рд╕ рд╕реНрддрд░ рдХреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
1) рд╕рднреА рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ
2) рдЖрдВрддрд░рд┐рдХ рдореВрд▓ рд╡рд╛рджреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╡рд╛рджрд╛ lib рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
3) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ lib рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░ knex рдЕрдм async рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдЙрд╕ рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рддреЛ рдореВрд▓ рдореБрджреНрджреЗ рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдмрд╕ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдФрд░ // tslint:disable-next-line: await-promise рдЬреИрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реИ

@maximelkin рдореИрдВ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░рддрд╛ рд╣реВрдВред рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рд░ рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

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

@Bessonov рд╡рд░реНрддрдорд╛рди рдореЗрдВ knex рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдФрд░ рд╢рд╛рдпрдж рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрдордмреИрдХ рд╕рдорд╛рдзрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП

@Bessonov рд╡рд░реНрддрдорд╛рди рдореЗрдВ knex рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдФрд░ рд╢рд╛рдпрдж рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╝реЙрд▓рдмреИрдХ рд╕рдорд╛рдзрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП

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

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

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА 1.5 рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм рдЦреБрд╢ рд╣реИрдВред

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

рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓реЗ knex 0.x рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ 0.20.x рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдкрдЧреНрд░реЗрдб рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ (рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ <1 рд╣реЛрдиреЗ рдкрд░ рд╕реЗрд╡рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдвреАрд▓рд╛ рд╣реИ)ред

рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЯреЗрдмрд▓ рдкрд░ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╣рдЯрд╛рдирд╛

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

рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ, рдЪреИрдВрдЬ,

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

Ioredis рдкреНрд░реЛрдЬреЗрдХреНрдЯ https://github.com/luin/ioredis/commit/da60b8b рдкрд░ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рд╡реЗ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ - рдФрд░ рд▓реЛрдЧреЛрдВ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рд╛ рдФрд░ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореВрд▓ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдПрдХ рдХрд╕реНрдЯрдо рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗрдЯ рдХрд░рдирд╛ рддреЗрдЬрд╝ рд╣реИ рдФрд░ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдмреНрд▓реВрдмрд░реНрдб рд░реИрдкрд┐рдВрдЧ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ knex API рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рдПрдХ рд░рд╛рдп рджреЗрдЦреА рдХрд┐

рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рд░ рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЖрдИрдПрдордПрдЪрдУ рджреЛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ:

  • рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреЗрдЬрд╝ рд╣реИред
  • рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреЛрд▓реАрдлрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдПрдХ рдХрд╕реНрдЯрдо рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗрдЯ рдХрд░рдирд╛ рддреЗрдЬрд╝ рд╣реИ рдФрд░ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

@qubyte

рдпрд╣ рдЙрддрдирд╛ рдЫреЛрдЯрд╛ рдЙрдкрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдирд┐рд░реАрдХреНрд╖рдг рдореЗрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

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

@jehy : рдХреЛрдб рдХреА рдЙрди 10 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реАрдзрд╛ рддрд░реАрдХрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдЬ рдХреБрдЫ рд╕рдордп рдбрдмреНрд▓реНрдпреВ/рд╡рд░реНрдХ-рдЕрд░рд╛рдЙрдВрдб рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рднреА рдмрд┐рддрд╛рдКрдВрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреАрдЖрдИ рдХреЛ рдЗрди рдкреИрдХреЗрдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдпрд╛ рдХрд░реАрдмреА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/sindresorhus/promise-fun

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

~ 1 рдХреЗ рдмрдЬрд╛рдп 50 рдкреИрдХреЗрдЬ? рдЧрдВрднреАрд░рддрд╛ рд╕реЗ?

рд╣рд╛рдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХреЗрд╡рд▓ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреА-рдореИрдк)ред рд╕рдЪрдореБрдЪ рдореЗрдВ, рдЖрдкрдХрд╛ рдорд╛рдЗрд▓реЗрдЬ рдЕрд▓рдЧ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@jehy : рдпрд╣рд╛рдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛрдб рдХреЗ рднреАрддрд░ рдЕрд╕реНрдерд╛рдпреА рдХрд╛рдордХрд╛рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:

const Bluebird = require('bluebird');


const prototypesNeedingDecoration = [
  require('knex/lib/query/builder').prototype,
  require('knex/lib/schema/builder').prototype,
  require('knex/lib/transaction').prototype,
  require('knex/lib/raw').prototype,
];

const corePromiseMethods = ["then", "catch", "finally"];


function decoratePromiseMethods(target) {
  for(const m of corePromiseMethods) {
    const original = target[m];

    target[m] = function(...args) {
      return Bluebird.resolve(original.apply(this, args))
    }
  }  
}

function hackBluebird() {
  for(const target of prototypesNeedingDecoration) {
    decoratePromiseMethods(target);
  }
}


hackBluebird();

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЧреНрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред knex рдХреЗ рднреАрддрд░ рдмрдирд╛рдИ рдЧрдИ рдЕрдиреНрдп рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╕рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

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

рдмрд╕ рдЕрдкрдиреЗ 2 рд╕реЗрдВрдЯ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

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

  1. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рджреВрд╖рд┐рдд рд╕реНрдЯреИрдХ рдирд┐рд╢рд╛рди рдирд╣реАрдВ рд╣реИрдВ
  2. рд╣рдордиреЗ рдЕрдкрдиреЗ SSR рд╡рдЬрди рдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрдо рдХрд┐рдпрд╛
  3. рд╣рдордиреЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреЗрд╢реА рдПрд╕рд┐рдВрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдм рдмреНрд▓реВрдмрд░реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реИ (рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ!)

рдпрд╣ es рдорд╛рдирдХ рдХреА рдУрд░ рджреМрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдмрдбрд╝реА рдЬреАрдд рд╣реИ ... рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЛрдЭ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреАрдбрд╝рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд▓рд╛рдн рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдЪрд╛рд╣рд┐рдП рддреЛ рдХреГрдкрдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ!

@chaffeqa рдЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ!

@ рдЬреЗрд╣реА : рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдЖрдкрдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реБрдЖ?

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

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

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

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

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

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

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