рдиреЛрдб v6 рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╕рдордп, рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдорд╛рдирдХ ES6 рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рдмреНрд▓реВрдмрд░реНрдб рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ)?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдорд┐рд╕-рдХреНрдпреВ рдкреИрдХреЗрдЬ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЪреВрдХ рдХрд░рддрд╛ рд╣реИ,
https://www.npmjs.com/package/promise-queue
рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ Queue.configure(require('vow').Promise);
. рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рддреЛ рдХреНрдпрд╛ рдпрд╣ рдкреИрдХреЗрдЬ рдЗрд╕реА рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ: рдЖрдк рдПрдХ рддреЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдзреАрдореЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдиреЛрдб рд╕реНрдкреАрдб рдореЗрдВ рдПрдХ рдХрд╛рд░рдХ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИ?
@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>()
рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдЬрдм рдлреВ рдмреНрд▓реВрдмрд░реНрдб рд╣реИ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдБ
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()
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкрде рд╣реЛрдЧрд╛ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╡реЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рднреА рдХреЙрд▓реЛрдВ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦреЛрдЬ/рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдкрд░ рд╢реЙрдЯ рд▓реЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ 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
https://github.com/tgriesser/knex/issues/3253
https://github.com/tgriesser/knex/issues/3254
https://github.com/tgriesser/knex/issues/3255
https://github.com/tgriesser/knex/issues/3256
https://github.com/tgriesser/knex/issues/3257
https://github.com/tgriesser/knex/issues/3268
https://github.com/tgriesser/knex/issues/3286
рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдПрдордЖрдИрдП рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдмрдврд╝ рд░рд╣реА рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╡рд╣рд╛рдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдУрдВ рдкрд░ рд▓реВрдк рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: 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 рдЖрдЦрд┐рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдереА рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рдФрд░ рдкреВрд░реНрдг рдореВрд▓ рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:
рдпрд╣ es рдорд╛рдирдХ рдХреА рдУрд░ рджреМрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдмрдбрд╝реА рдЬреАрдд рд╣реИ ... рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЛрдЭ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреАрдбрд╝рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд▓рд╛рдн рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдЪрд╛рд╣рд┐рдП рддреЛ рдХреГрдкрдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ!
@chaffeqa рдЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ!
@ рдЬреЗрд╣реА : рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдЖрдкрдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реБрдЖ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
:+1: рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдПред