рд╕реБрдирд┐рдпреЗ рд╕рдм рд▓реЛрдЧ!
рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрдкреАрдл рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ @lhecker рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: рд╡реИрд╢реНрд╡рд┐рдХ Promsie
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдм рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ bluebird-global.d.ts рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЦреИрд░ рдЖрдИрдПрдордПрдЪрдУ рдкрд┐рдЫрд▓реА рдмреНрд▓реВрдмрд░реНрдб рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рднрд╛рд░реА рд░реВрдк рд╕реЗ рд▓реАрдХ рд╣реЛ рдЧрдП рдереЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╡рд╣ declare var Promise: PromiseConstructor;
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╣реИ рдЬрдмрдХрд┐ PromiseConstructor
рдкрд┐рдЫрд▓реЗ (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдмреНрд▓реВрдмрд░реНрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛ред
рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп *.d.ts
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
import Bluebird = require("bluebird");
declare var Promise: Bluebird<any>;
рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ:
declare function doLoadData(): Promise<Data>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди Promise<T>
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ Promsie
рд╣реИ, рдмреНрд▓реВрдмрд░реНрдб рдПрдХ рдирд╣реАрдВред var Promise: Bluebird<any>
рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдореИрдВ рдорд╛рдирдХ рд╡рд╛рджрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВред
рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ 2.0 рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред
@Strate рдЖрд╣ рд▓рд╛рдирдд рд╣реИ рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреА рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдФрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЬрдорд╛ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдпрд╣ рдЦреЛ рдЧрдпрд╛ ...
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рд░реЗрдкреЛ рдмрдирд╛рдпрд╛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: https://github.com/d-ph/typescript-bluebird-as-global-promise
рдЧрд┐рдЯ рдХреНрд▓реЛрди && npm install
&& npm run tsc
рд╕рдорд╕реНрдпрд╛:
рддреГрддреАрдп рдкрдХреНрд╖ d.ts
рдлрд╝рд╛рдЗрд▓реЗрдВ Promise
рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЯрд╛рдЗрдк рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ Promise
рдпрд╛ рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ lib.es6.d.ts
(рдЬрдм "target": "es6"
) рдпрд╛ рдЕрдиреНрдп рдХрд╛рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП core-js
(рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде es5 рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп) . рдирд╡реАрдирддрдо bluebird.d.ts
рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднрд▓реЗ рд╣реА bluebird.js рдЦреБрдж рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо:
рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб (рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд╛рджреЛрдВ рдкрд░ рджреЗрд╡ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:
рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб (рд╕рдВрдХрд▓рди рд╕рдлрд▓) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд╛рджреЛрдВ рдкрд░ рджреЗрд╡ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреМрди рд╣реИред @lhecker , рдЖрдк git blame
рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдХреНрдпрд╛ рд╣реИ, рдХрд┐ рдЬреАрдердм рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ?
рд╡рд░реНрддрдорд╛рди рдкреИрджрд▓ рдорд╛рд░реНрдЧ:
Promise
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: Promise["config"]({}); Promise.resolve("foo")["finally"](() => { console.log("lol"); })
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЪреБрдк рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛рдиреА рдРрд░реЗ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: [""]
import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }
рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, Bluebird.config({})
рдХреЗ рдмрдЬрд╛рдп Promise.config({})
#$4$#$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рдЗрд╕ рд╣реИрдХ рдХреА рд╕рд╣реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдореНрдо... рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ рдХрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдПрдХ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЦреБрдж рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреА рдирд╣реАрдВ рд▓рд┐рдЦреА рдереА! рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕реЗ рдХреЗрд╡рд▓ 3.0 рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 3.0 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд╣реИ рдирд╛?
рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рджрд┐рд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ modules > globals
рд╣реИ рдЬреЛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрднреА рднреА рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Bluebird
рд╣рд░ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдпрд╛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП:
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА Promise.noConflict()
рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреА "рдЯрд╛рдЗрдк рд╕реЗрдлреНрдЯреА" рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдкреНрд░рдХрд╛рд░ рдХреЛ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрдЧрд╛, рднрд▓реЗ рд╣реА tsc
рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рддреЛ рд╣рд╛рдБ ... @ рдбреА-рдкреАрдПрдЪред рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рд╡реЙрдХрдЕрд░рд╛рдЙрдВрдб рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ _can_ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 2.0 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред
рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реБрдП _very_ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ( noConflict()
рд╕рдорд╕реНрдпрд╛ рдЖрджрд┐ рдпрд╛рдж рд░рдЦреЗрдВ) рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдХреЗрд╡рд▓ рдСрдкреНрдЯ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВред
рдЖрдИрдПрдордУ рдЖрдЧреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА bluebird-global.d.ts
(рдпрд╛ рд╕рдорд╛рди) рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ bluebird.d.ts
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд _рдФрд░_ рд╕рд╣реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рднреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд░рдЦрддреЗ рд╣реБрдПред
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЦрд╛рд▓реА рд╕рдордп рдмрдЪрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХреЗрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдпреЛрдЧрджрд╛рди рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рдореИрдВ
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рдордп рдХреА рдХрдореА рдФрд░ рдЗрд╕ рд╕рдордп рдРрд╕реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред
@lhecker рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╣реИрдХ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЛ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рд╛рде Promise
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЛрдЪреЗрдЧрд╛ рдХрд┐ fetch
рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ:
import `whatwg-fetch`;
let result = fetch("anyurl"); // this is NOT bluebird promise, but typescript think that it is.
fetch
рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ Promise.resolve
рдореЗрдВ рд▓рдкреЗрдЯреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, result рдкрд░ result
.finally
рд╡рд┐рдзрд┐:
import `whatwg-fetch`;
fetch("anyurl").then().finally() // goes to runtime error with overriden global promise, but should be compile error.
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ bluebird
рдЖрдпрд╛рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ:
import Promise from "bluebird";
import `whatwg-fetch`;
Promise.resolve(fetch("anyurl")).then().catch() // no compile error, no runtime error
рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @lhecker ред
рдЖрдкрдХреА рдХрд╣реА рд╣рд░ рдПрдХ рдмрд╛рдд рд╕реЗ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдФрд░ рдореБрдЭреЗ Promise.resolve()
рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ @Strate рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, es6 рд╡рд╛рджреЗ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб (рдпрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╡рд╛рджреЗ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдбреЙрди рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рдВрджреБ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ)ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЛ рдлрд╛рдпрджрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЛрдИ (рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд: рдиреЛрдбрдЬ/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ) рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ:
npm install <absolutely everything that uses es6 promise>
npm install bluebird @types/bluebird
рдореБрдЭреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ "рдПрд╕ 6 рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЕрдиреБрднрд╛рдЧ рд╣реЛрдиреЗ рд╕реЗ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдпрд╛рдиреА
import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }
рддрдерд╛
import * as Promise from 'bluebird';
import { Observable } from "rxjs";
let observable = Promise.resolve(new Observable<number>().toPromise());
рдПрдХ рд░реАрдбрдореА рдореЗрдВ рдпрд╛ рдмреНрд▓реВрдмрд░реНрдб.рдбреА.рдЯреАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмреНрд▓реЙрдХ рдореЗрдВред
рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рдореИрдВрдиреЗ Promise
рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рд▓реЗ рдкрд░ рдЬрд╛рдирд╛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реА рд╣реИрдВ, рдЬрд╣рд╛рдВ рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ES6 рдкреНрд░реЙрдорд┐рд╕ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдХрджрдо рд╕реЗ рдореЗрд░рд╛ рдХреЛрдбрдмреЗрд╕ рднреА рд╕рд╛рдл рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рд╕рднреА рдХреЛ Promise
рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╣рдЯрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдЪреАрдпрд░реНрд╕ :)
рдореИрдВ modules > globals
рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рддрд░реНрдХ (рдФрд░/рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛) рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдПрдХ рдмрдбрд╝реЗ-рдИрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрд╕рдкреАрдП рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдкреНрд░реЙрдорд┐рд╕ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВ @d-ph рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде @lhecker рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП bluebird-global.d.ts
рдлрд┐рдХреНрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }
рдореИрдВрдиреЗ рдЗрд╕реЗ typings
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореЗрд░рд╛ typings/modules/bluebird-global/index.d.ts
рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рд╣реИ:
// Generated by typings
// Source: src/bluebird-global.d.ts
declare module 'bluebird-global' {
// via https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801
import * as Bluebird from 'bluebird';
global { export interface Promise<T> extends Bluebird<T> {} }
}
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рд╕рдм рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (v1.8.2) рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ:
ERROR in /path/to/typings/modules/bluebird-global/index.d.ts
(6,27): error TS2665: Module augmentation cannot introduce new names in the top level scope.
ERROR in /path/to/src/bluebird-global.d.ts
(2,35): error TS2665: Module augmentation cannot introduce new names in the top level scope.
рдореИрдВрдиреЗ global-modifying-module.ts
. рдХреЗ рд▓рд┐рдП MS рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА
https://www.typescriptlang.org/docs/handbook/declaration-files/templates/global-modifying-module-d-ts.html
рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ TS рд╕рдорд╕реНрдпрд╛
https://github.com/Microsoft/TypeScript/issues/6722
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдиреБрдХрд╕рд╛рди рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдирдорд╕реНрддреЗред
рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рд░реЗрдкреЛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ? рдХрдбрд╝реА ред рдореИрдВ рдЗрд╕рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рдерд╛, рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдЕрдм рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реАрдбрдореА рдореЗрдВ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
// declare global {
// export interface Promise<T> extends Bluebird<T> {}
// }
рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ?
рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдХрд┐ рдореЗрд░рд╛ рд░реЗрдкреЛ TS 2 (рдЬреЛ рдЕрдм рд╕реНрдерд┐рд░ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк 1.8.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк TS рдХреЛ 2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдиреА рд╡реИрд╢реНрд╡рд┐рдХ d.ts
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдбрд╛рд▓рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реЗрдмрдкреИрдХ рд╕рдВрдХрд▓рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ (рдЬреЛ рдЕрдм рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред рдореИрдВ рдЖрдкрдХреЗ рдЬреЗрдПрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рд╣рд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдирд╛ рдлрд┐рдХреНрд╕ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ) рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ?
рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ Promise
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХреЗ рд░реВрдк рдореЗрдВ "рдкрдВрдЬреАрдХреГрдд" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдпрд╣ рдкреВрд░рд╛ рд╕реВрддреНрд░ рдкрдврд╝рд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ред рднрд╛рдЧ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрднреА рднреА рдореВрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдмреНрд▓реВрдмрд░реНрдб) Promise
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ Promise
рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ ( new Promise(...)
) рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
<script src="//.../bluebird.min.js"></script>
<script>
var promise = fetch("some url");
promise.finally(...);
</script>
рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореВрд▓ Promise
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ?
рдЕрдВрдд рдореЗрдВ, рдЕрдЧрд░ рдореИрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдпрд╣ рдкреВрд░реНрдг рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░, рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕рд╛рде рднреА рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред
рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?
рдпрджрд┐ рдЖрдк рдмреНрд▓реВрдмрд░реНрдб (рдЬреЛ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рджреВрд░рд╕реНрде рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдЕрдм рдмреНрд▓реВрдмрд░реНрдб рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдареАрдХ рд▓рдЧрд╛ред рд▓реЛрдЧ рдЕрдиреНрдпрдерд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдкреВрд░рд╛ рд╕реВрддреНрд░ ts рдХреЛ рдЙрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рд╡рд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╣реИ)ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП declare global {}
рдЪреАрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рддреЛ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЧрдпрд╛ред
@ d-ph рд▓реЗрдХрд┐рди рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░ *.ts
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд░рдирд╛ рд╣реИ рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ - рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ? рд╢рд╛рдпрдж рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдВрддрд┐рдо "рд╕рдорд╛рдзрд╛рди" рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред :)
рд╣рд╛рдБ, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдХреЛрдИ рд╕рд░рд▓ just copy&paste this line to your X file and everyone and their dog are happy now
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рдпрд╛ рддреЛ рдЖрдкрдХреА рдЬрд╛рдБрдЪ рдХреА рдереА:
import * as Bluebird from 'bluebird'; declare global { export interface Promise<T> extends Bluebird<T> {} }
рд▓рд╛рдЗрди рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдпрд╛рдлрд┐рд░ рд╕реЗ, рд╕рдорд╛рдзрд╛рди 1. рдЙрд╕ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╡реЗрдмрдкреИрдХ + рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░)ред
рдпрджрд┐ рдЖрдк рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдЪрдореБрдЪ рджреЗрд╡реЛрдВ рдХреЛ 1 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдкрдВрдХреНрддрд┐ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ; рдкреА
рдзрдиреНрдпрд╡рд╛рдж @ d-ph -- рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ *.ts рдлрд╝рд╛рдЗрд▓" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ?
рд╣рд╛рдВред "рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ" .ts рдлрд╝рд╛рдЗрд▓ .ts рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ html рдореЗрдВ <script>
рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рдВрдХрд▓рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдЕрднреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреБрдЧрд▓реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ (рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВ)ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ, рдХрд┐ рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ global { export interface Promise<T> extends Bluebird<T> {} }
рдХреЛ bluebird.d.ts рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЬреАрдердм рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, bluebird.d.ts рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реЗрдВ:
// Generated by typings
// Source: bluebird.d.ts
declare module 'bluebird' {
// Type definitions for Bluebird v3.x.x
// Project: http://bluebirdjs.com
class Bluebird<R> implements Bluebird.Thenable<R>, Bluebird.Inspection<R> {
рдЗрд╕рдХреЗ рд▓рд┐рдпреЗ:
// Generated by typings
// Source: bluebird.d.ts
declare module 'bluebird' {
// Type definitions for Bluebird v3.x.x
// Project: http://bluebirdjs.com
global { export interface Promise<T> extends Bluebird<T> {} }
class Bluebird<R> implements Bluebird.Thenable<R>, Bluebird.Inspection<R> {
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк @types/bluebird
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрднреА рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╣реИрдХ рдХрд┐рдП рдЧрдП bluebird.d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ), рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ...
рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ _stubs.d.ts
рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдореИрдВ рдмрд╣реБрдд рдХрд░реАрдм рд╣реВрдВред finally
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реИ рдЬреЛ Promise
рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рднреА delay
Promise
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ bluebird.d.ts
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
declare module "bluebird-global" {
import * as Bluebird from "bluebird";
global { export interface Promise<T> extends Bluebird<T> { } }
}
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: delay
рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЗрд╕рд▓рд┐рдП рдереА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Promise.delay(2000)
ред
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрдм рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди Promise<T>
рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
рддреНрд░реБрдЯрд┐ TS2322: 'рдмреНрд▓реВрдмрд░реНрдб' рдЯрд╛рдЗрдк рдХрд░реЗрдВ
'рд╡рд╛рджрд╛' рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ 'ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВрдиреЗ Promise
рдХреЛ Bluebird
рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬрдм рднреА рдореИрдВ then
рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Bluebird<T>
рд╣реИ Promise<T>
ред
рдпрд╣рд╛рдБ рдЗрд╕ рд╣реИрдХ рдХрд╛ рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдореБрдЭреЗ рдпрд╣ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛, рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ Bluebird рдХреЗ рдмрдЬрд╛рдп Bluebird
Promise
рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмреНрд▓реВрдмрд░реНрдб рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕реАрдзреА рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рд╣реИред
_stubs.d.ts
declare module "bluebird-global" {
import * as Bluebird from "bluebird";
global {
export interface Promise<T> extends Bluebird<T> {
then<U1, U2>(onFulfill: (value: T) => U1 | Bluebird.Thenable<U1>, onReject: (error: any) => U2 | Bluebird.Thenable<U2>): Promise<U1 | U2>;
then<U>(onFulfill: (value: T) => U | Bluebird.Thenable<U>, onReject: (error: any) => U | Bluebird.Thenable<U>): Promise<U>;
then<U>(onFulfill: (value: T) => U | Bluebird.Thenable<U>): Promise<U>;
then(): Promise<T>;
finally<U>(handler: () => U | Bluebird.Thenable<U>): Promise<T>;
}
}
}
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ bluebird-global
рдпрд╛ bluebird-override
рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди $#$ Bluebird
рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдЬрдЧрд╣ Promise
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред
рдмрд╕ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП: рдЬреИрд╕рд╛ рдХрд┐ @ProTip рдиреЗ рдХрд╣рд╛, bluebird-2.0.d.ts
JustWorksTM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдмрд╕ рдЗрд╕реЗ npm install @types/[email protected]
рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ tsconfig.json рдХреЗ compilerOptions.types
рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
{
"compilerOptions": {
// (...)
"types": [
"bluebird"
]
},
"include": [
"src/**/*.ts"
]
}
рдЙрд╕ .d.ts рдФрд░ рд╡рд░реНрддрдорд╛рди рдмреНрд▓реВрдмрд░реНрдб рд╕рдВрд╕реНрдХрд░рдг (рдпрд╛рдиреА 3.x) рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣реИрдХ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
JustWorksTM рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ: рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдП) рдИрдПрд╕5 рд▓рдХреНрд╖реНрдп
рдмреА) ES6 рд▓рдХреНрд╖реНрдп
рд╕реА) рдХреЛрд░-рдЬреЗрдПрд╕ рд▓рд┐рдм рдХреЗ рд╕рд╛рде рдИрдПрд╕ 5 рд▓рдХреНрд╖реНрдп
рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдХреЛрдИ рдмрд┐рд▓реНрдб рд╕реЗрдЯрдЕрдк (рд╡реЗрдмрдкреИрдХ + рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, PhpStorm IDE рдмрд┐рд▓реНрдХреБрд▓ рднреА рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реИред
рдореИрдВрдиреЗ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЙрди рджреЛ рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛/рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://github.com/Microsoft/TypeScript/issues/10178 рдФрд░ https://github.com/Microsoft/TypeScript /рдореБрджреНрджреЗ/12382 ред рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ (рдФрд░ рдХреБрдЫ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ), рдХрд┐ рд╣рдореЗрдВ bluebird-global.d.ts
рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
// bluebird-global.d.ts
import * as Bluebird from "bluebird";
export as namespace Promise;
export = Bluebird;
рдмрд╢рд░реНрддреЗ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рджреЛ рдЯрд┐рдХрдЯреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реЛред рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдмреНрд▓реВрдмрд░реНрдб-2.0.d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
@ рдЬреЛрд╢ рдореИрдХрдХреБрд▓реНрдлрд╝
рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдирдпрд╛ рдкреНрд░реЙрдорд┐рд╕ (...)) рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмреНрд▓рд┐рдмрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдмрд╣реБрдд рдЖрд╕рд╛рдиред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (Chrome рдкрд╕рдВрджреАрджрд╛):
var NativePromise = Promise;
window.Promise = function() {}; // try to overload NativePromise
NativePromise === Promise; // false. Seems it is overloaded!
// And now, let check with some native code, which return Promise, for example fetch
Object.getPrototypeOf(fetch("")) === Promise.prototype; // false, Whoops!
Object.getPrototypeOf(fetch("")) === NativePromise.prototype; // true! Double whoops!
рдирдорд╕реНрддреЗред рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдмрд░реНрдб рдкрд░ рдирд┐рд░реНрднрд░ рди рд░рд╣реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реВрдмрд░реНрдб рдЖрдпрд╛рдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рдХрд░реЗрдВ:
рд╡реИрд╢реНрд╡рд┐рдХ ['рд╡рд╛рджрд╛'] = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдмреНрд▓реВрдмрд░реНрдб')
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рднреА рд╢рд╛рдорд┐рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,
@types/bluebird-global
рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИред рдпреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмреЛрдирдЯ рдХреЗ рдиреАрдЪреЗ @types/bluebird@^3.0
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ (рдпрд╛рдиреА ts рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрдврд╝реЗрдВред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж @ рдбреА-рдкреАрдПрдЪ!
@ d-ph @types/bluebird-global
рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдпрд╛рдд рдФрд░ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
npm install --save-dev @types/bluebird-global
рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рд▓рд┐рдВрдХ (рд▓рд┐рдВрдХ рдЕрдкрдбреЗрдЯ 2017-04-02)ред рдпрд╣ рдЕрдХреЗрд▓реЗ рд╣реА рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдЖрдпрд╛рдд/рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред
рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ: рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ package.json::devDependencies
@types/bluebird
рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред
рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ: рд▓рд┐рдВрдХ
@MichaelTontchev @ d-ph рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рд╣рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ Promise.Inspection
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?
рд╣рд╛рдп @ksnydeред
рдХреГрдкрдпрд╛ рдореБрдЭрд╕реЗ рдмрд╛рдд рдХрд░реЗрдВред рдореИрдВ рд░рдЦрд╡рд╛рд▓рд╛ рд╣реВрдБред
рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдЖрдк рдЗрд╕ Promise.Inspection рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреГрдкрдпрд╛?
рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ bluebird-global
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛:
let promiseInspectionTest = new Promise<void>((resolve) => {});
promiseInspectionTest.value();
рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ Promise.Inspection
рд╕реЗ bluebird-global
рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЭрдЯрдХрд╛ рд╣реИ:
import * as Bluebird from "bluebird";
class Foo<T> implements Bluebird.Inspection<T> {
}
рдЪреВрдВрдХрд┐ рдЖрдк bluebird-global
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯ devDependencies
рдХреЗ рдореВрд▓ bluebird
рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдареЛрд╕ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдорд╛рдирдХ рд╡рд╛рджрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдХреНрд╖реНрдо рдХрд▓рд╛ рд╣реИ lib.d.ts
ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ bluebird
рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рджрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреБрд░реБ рдорд╛рдирдХ рдореЗрдВ Promise.Inspection
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ bluebird-global
рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдореИрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реВрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА master
, рдХреНрдпреЛрдВрдХрд┐ рдбреАрдЯреА рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдЗрди рджрд┐рдиреЛрдВ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИрдВред
рдЪреАрдпрд░реНрд╕ред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рдордХрд╛рдЬ рд╣реИред рдпрд╛ рд╢рд╛рдпрдж "рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕" рдЧрд▓рдд рдирд╛рдордХрд░рдг рд╣реИред
рдореЗрд░реА рд╕рдордЭ/рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕реБрдкрд░рд╕реЗрдЯ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдореИрдВ _would_ Bluebird.Inspection
рдХреЛ Promise.Inspection
рдкрд░ рдЙрдЬрд╛рдЧрд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рджреЛрдВ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреАрдЖрдИ рд╕рддрд╣ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдЬрдмрдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред
рдЬрдмрдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ bluebird-global
рдмрдирд╛рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рдерд╛ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рд╕реЗ рдмрдирд╛рдП рдЧрдП рдФрд░ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп _not рдХрд╖реНрдЯрдкреНрд░рдж_ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдкреНрд░рддреАрдХ рдкрд░ рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг class Promise<T> extends Bluebird<T> {}
рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдерд╛), рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдкреНрд░рддреАрдХ рд╣реИред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХреБрдЫ рднреА рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреНрдЮрд╛рдд рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ рд╕рдЪрдореБрдЪ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрд╛рд▓реЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рд┐рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЦреАрдВрдЪрддрд╛ рд╣реИред
рдЗрд╕реЗ "рдирд╣реАрдВ" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЕрдЧрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд▓реЛрдЧ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ - рдпрд╣ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рд╢рд╛рдпрдж рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реИ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред
рдЪреАрдпрд░реНрд╕ред
рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреАрдЫреЗ рд╕реЛрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@ d-ph рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ ... рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ "рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд" рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ:
рдФрд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдореЗрдВ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ p
рдПрдХ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХреЗрд╡рд▓ рдмреНрд▓реВрдмрд░реНрдб (рдмрдирд╛рдо рд╡рд╛рджрд╛) рдкрд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред
рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд┐рд░ рдпрд╛ рдЯреЗрд▓ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдЪрд░ рдХреЗ _type_ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореБрдЭреЗ bluebird-global
рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реАрдорд┐рдд рдПрдкреАрдЖрдИ рд╕рддрд╣ рдорд┐рд▓ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рд╣рд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдирдорд╕реНрддреЗред
рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ:/рд╡реЗ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрд░реЗ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗред рдЖрдк рдЕрдкрдиреЗ allSettled()
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ bluebird-global
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк Bluebird
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ bluebird-global
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
function allSettled<T>(promises: Array<Promise<T>>) {
const reflections = Promise.all<T>(promises.map((promise => {
return promise.reflect();
})));
return reflections;
}
рдпрд╛рдиреА рд╡рд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╡реИрд╢реНрд╡рд┐рдХ Promise
рдореЗрдВ рдЯрд╛рдЗрдк рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ bluebird-global.d.ts
рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛: рдпрд╣ рдЖрдкрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдФрд░ рдореЗрд░реЗ рджреЛрдиреЛрдВ рд╕реНрдирд┐рдкреЗрдЯ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ: рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ Promise
рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЖрдк рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдмрдЬрд╛рдп рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде allSettled()
рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рдФрд░ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВред
function allSettled<T>(promises: Array<Promise<T>>) {
const reflections = Promise.all<T>(promises.map((promise => {
return promise.reflect();
})));
return reflections;
}
let promises = [
Promise.resolve(),
Promise.reject(new Error("rejected test")),
new Promise<void>(() => {}),
];
let reflections = allSettled(promises);
console.log(reflections);
// this is part of my entry point
/*
* Promise
*/
import * as Promise from 'bluebird';
import 'expose-loader?Promise!bluebird';
_Pic 1: Array.map() рдореЗрдВ рд╡рд╛рджрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╣реИ (рдЖрдк рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЧреБрдгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: _bitField
)_
_Pic 2: Promise.reflect рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ_
рдХреНрдпрд╛ рдЖрдк рдХреНрд░реЛрдо рджреЗрд╡ рдЯреВрд▓реНрд╕ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рдЬреЗрдПрд╕ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ promise
рдХреЗ рдЕрдВрджрд░ .map
рдХреНрдпрд╛ рд╣реИ? рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ: рдХреНрдпрд╛ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЗрд╡рд▓ Promise
рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛:
рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдмрд╕ рдПрдХ рджреЗрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛: рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ $# Array<Promise<T>>
$#$ рдХреЗ рдмрдЬрд╛рдп Promise<T>[]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрд╡реЛрдВ рдХреА рд╡рд░реАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рд╕реА рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдХреЛрдИ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рджреЗрд╡ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА-рдкрд╣реБрдВрдЪ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЪреАрдпрд░реНрд╕ред
рдЗрддрдиреА рдЧрд╣рди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдмрд╛рдд рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБ рдХрд┐рд╕ рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ:
рдЖрдпрд╛рдд 'рдПрдХреНрд╕рдкреЛрдЬрд╝-рд▓реЛрдбрд░?рд╡рд╛рджрд╛!рдмреНрд▓реВрдмрд░реНрдб';
@ рдбреА-рдкреАрдПрдЪ рдЖрд╣, рдКрдкрд░ рдПрдХ рд▓рд╛рдЗрдирд░ рд╡рд╣ рдерд╛ рдЬреЛ рдореИрдВ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЖрдкрдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рд╡рд╣рд╛рдБ рдХрднреА рдирд╣реАрдВ рдкрд╣реБрдБрдЪрддрд╛! рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ README
рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдПрдХреНрд╕рдкреЛрдЬрд╝ рд▓реЛрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдВрджрд░реНрдн рдерд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА 100% рдирд╣реАрдВ рд╣реВрдВ рдпрджрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдиреЛрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ (рд░рди рдЯрд╛рдЗрдо рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ):
рддреНрд░реБрдЯрд┐: рдореЙрдбреНрдпреВрд▓ 'рдПрдХреНрд╕рдкреЛрдЬрд╝-рд▓реЛрдбрд░? рдкреНрд░реЙрдорд┐рд╕! рдмреНрд▓реВрдмрд░реНрдб' рдирд╣реАрдВ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрд╛
рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, expose-loader
рдПрдХ рд╡реЗрдмрдкреИрдХ рдЪреАрдЬрд╝ рд╣реИ (рдПрдХ рд╡реЗрдмрдкреИрдХ рд▓реЛрдбрд░)ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╡реЗрдмрдкреИрдХ рдХреЛ рдЙрд╕ import
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ (рдпрд╛рдиреА рдЖрдкрдХреЛ "рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдвреВрдВрдврд╛ рдЬрд╛ рд╕рдХрддрд╛" рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА)ред
рдпрджрд┐ рдЖрдк рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ/рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдЕрднреА рдорд┐рд▓рд╛: https://github.com/petkaantonov/bluebird/issues/1026 (рдиреЛрдб рдореЗрдВ Promise
рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛)ред
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рдиреЛрдб 7 рдореЗрдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рд░реАрдбрдореЗ рдореЗрдВ expose-loader
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА d.ts
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрддрд╛рддрд╛ рд╣реВрдВ, рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд╛рджрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреЗрд╡реЛрдВ рдХрд╛ рдХрд╛рдо рд╣реИ: рд▓рд┐рдВрдХ ред рдЪреВрдВрдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдХрд┐ expose-loader
window.Promise = Bluebird
рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдареАрдХ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ Google рдореЗрд░реЗ рдЙрддреНрддрд░ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ; рдкреА
@ d-ph рджреЗрд╢реА async-рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп AWS рд▓реИрдореНрдмреНрдбрд╛ рдкрд░ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП 6.10.x рдиреЛрдб рдкрд░ рдмрдВрдж рд╣реВрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рд╕ рдореЗрдВ рдореИрдВ рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА async-рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕реЗ ES2015 рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рддрдХ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рд╡реИрд╕реЗ рднреА, рд▓рд┐рдВрдХ @ рдбреА-рдкреАрдПрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ред рдУрд╣ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ (рдЬреЛ рд╡рд╛рджрд╛-рднреВрдорд┐ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИрдВ):
export function allSettled<T>(promises: Array<Promise<T>>) {
const reflections = Promise.all<Promise.Inspection<T>>( promises.map((p => p.reflect())) );
return reflections as Promise<Array<Promise.Inspection<T>>>;
}
export function settleProps<T>(promiseHash: IDictionary<Promise<T>>) {
const reflections: IDictionary<Promise<Promise.Inspection<T>>> = Object.keys(promiseHash)
.reduce((newObject: IDictionary<any>, key: string) => {
newObject[key] = promiseHash[key].reflect();
return newObject;
}, {} as IDictionary<Promise<Promise.Inspection<T>>>);
return Promise.props(reflections) as Promise<IDictionary<Promise.Inspection<T>>>;
}
рдкреВрд░реНрдг рдЗрдВрдЯреЗрд▓реАрд╕рд┐рдВрдХ/рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИред
@ рдбреА-рдкреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ ...
рдЬрдм рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ then
рдФрд░ catch
рджреЛрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдВрддрд░ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдорд╛рдирдХ рд╡рд╛рджрд╛ рдПрдкреАрдЖрдИ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Promise.resolve(true).catch(Error, () => false)
рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ catch
рдХреЗрд╡рд▓ 1 рддрд░реНрдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдПрдХ рдФрд░ рдореБрджреНрджрд╛:
Promise.resolve([3]).map((n: number) => true)
рдЗрд╕рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓:
тФВTS2345: Argument of type '(n: number) => boolean' is not assignable to parameter of type 'IterateFunction<{}, boolean>'. тФВ
тФВ Types of parameters 'n' and 'item' are incompatible. тФВ
тФВ Type '{}' is not assignable to type 'number'. тФВ
рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рд┐рд░реНрдл рдЯрд╛рдЗрдкрдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж!
рдирдорд╕реНрддреЗ,
.catch(Error, function)
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рдпрд╣ рдХрд╣рдХрд░ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ .then
, .catch
(рдФрд░ рдЕрдзрд┐рдХ) рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдмрд╛рдХреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢рд┐рд╖реНрдЯ .catch(Error, function)
рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдореИрдВрдиреЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдореИрдВ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:
Promise.resolve(true).catch(Error, () => false)
рдореИрдВрдиреЗ TS 3.0.1 рдФрд░ 2.9.2 рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХреАред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рдЬреЛ bluebird-global
рдХреЗ рдмрд╛рдж рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реЛред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдЯреАрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЯреВрдЯрддрд╛ рд╣реИред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдердм рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рддрдереНрдп рджрд┐рдП рдЧрдП рд╣реИрдВ:
bluebird-global
.map()
рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдмрд╕ bluebird.d.ts
рдХреА .map()
рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рджреЛрд╖ bluebird-global
рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПредPromise.map()
рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Bluebird.map()
рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ:import Bluebird = require('bluebird');
Bluebird.resolve([3]).map((n: number) => true); // works
Promise.resolve([3]).map((n: number) => true); // fails
{}
n
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ bluebird.d.ts
рдХреЛ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓рдВрдмреА рдХрд╣рд╛рдиреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдореВрд░реНрдд рдХреА рд╕рднреА рдкрд░рддреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж .map()
рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:map<U>(
mapper: (
item: U,
index: number,
arrayLength: number
) => U | PromiseLike<U>,
options?: Bluebird.ConcurrencyOption
): Bluebird<T extends Iterable<any> ? U[] : never>;
рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ mapper
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ $#$20 item
#$ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди (рдпрд╛ рдЙрд╕реА рдХрд╛ рд╡рд╛рджрд╛) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдЗрдЯрдо рдХрд╛ рдкреНрд░рдХрд╛рд░ number
рд╣реИ рдФрд░ рд╡рд╛рдкрд╕реА рдХрд╛ рдкреНрд░рдХрд╛рд░ boolean
рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ Bluebird
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпреЛрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрд╣ рддрдм рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ item
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ any
ред bluebird.d.ts
рдХреЗ type IterableItem<R>
рдФрд░ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред
@d-ph
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдореИрдВрдиреЗ map()
рдХреЗ "рдЕрдирд▓реЗрдпрд░реНрдб" рдлреЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛, рдФрд░ mapper
рдлрд╝рдВрдХреНрд╢рди рдХреЛ item
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдерд╛)ред рдореЗрд░реА рдЧрд▓рддреАред
рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ .map() рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдмрд╕ bluebird.d.ts рдХреА .map() рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ Bluebird<R>
рд╕реЗ рдЯрд╛рдЗрдк рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ {}
рдХреЗ рд▓рд┐рдП R
рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ map: typeof Bluebird<T>.prototype.map
рдХрд╛рдо рдХрд░реЗрдЧрд╛? (рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ)
рдЬрд░реВрд░реА:
рдпрджрд┐ @types/bluebird-global
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ @types/bluebird
рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ @ d-ph рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ
npm install --save-dev @types/bluebird-global
рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рд▓рд┐рдВрдХ (рд▓рд┐рдВрдХ 2017-04-02 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред рдпрд╣ рдЕрдХреЗрд▓реЗ рд╣реА рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдЖрдпрд╛рдд/рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)редрдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ: рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ
package.json::devDependencies
@types/bluebird
рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред
рджреЛрдиреЛрдВ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ @types/bluebird
рдФрд░ рдореЗрд░реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджреЗ ( @types/bluebird-global
) рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдорд┐рд╕ рдореИрдЪ рд╣реЛ рд░рд╣рд╛ рдерд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,
@types/bluebird-global
рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИред рдпреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмреЛрдирдЯ рдХреЗ рдиреАрдЪреЗ@types/bluebird@^3.0
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╡реИрд╢реНрд╡рд┐рдХPromise
рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ (рдпрд╛рдиреА ts рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)редрдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрдврд╝реЗрдВред