jsonex - рдЬрдЯрд┐рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ





рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрд╛рдлреА рдЖрджрд┐рдо рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдп рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬрдЯрд┐рд▓рддрд╛ рднреА рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рди рдХрд┐ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рдкреИрдЪ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдирд╛ред рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:





рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдмрд╛рд░-рдмрд╛рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдмрджрд╕реВрд░рдд рдмрд╛рдЗрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рд╕реЗ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред



jsonex рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд░рд▓, рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рдКрдкрд░ рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред



рд╕рд╛рдордЧреНрд░реА


jsonex

рд╕рдВрдХреЗрддрди рдХреЛ рдмреБрд▓рд╛рдУ

рдкреНрд░рд╕рдВрдЧ

рд╕рдВрдЪрд╛рд░ jsonex рдФрд░ рдЬреЗрдПрд╕

рдХрдореНрдкреНрдпреВрдЯреЗрдмрд▓ рдбреЗрдЯрд╛ (рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛)

рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рджреЗрдЦреЗрдВ

рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдбреЗрдЯрд╛ рдХреЗ рд▓рд╛рдн

HTTP рдФрд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рдмрд╛рддреЗрдВ

JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓

рдЖрд░реНрдХ

рдирд┐рд╖реНрдХрд░реНрд╖



jsonex



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



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





рд╣рдорд╛рд░реЗ JSON рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг (рдЗрд╕реЗ jsonex рдХрд╣рддреЗ рд╣реИрдВ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



{ //  name: 'John', familyName: 'Smith', dateOfBirth: '1901-01-01', friendIds: [ 124124, 283746, /*   */ ], num: 123, }
      
      





рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ JSON рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рджреВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд░реЗрдЦрд╛ рд╣реИ:



  dateOfBirth: '1901-01-01',
      
      





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



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



рд╕рдВрдХреЗрддрди рдХреЛ рдмреБрд▓рд╛рдУ



рд╣рдо рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



  dateOfBirth: Date('1901-01-01'),
      
      





рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдм рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдкрд╛рд░реНрдХрд░ рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдлреА рд╕реАрдзрд╛ рд╣реИред рдлрд╛рд░реНрдо SomeName(args...)



рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж SomeName(args...)



рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЪрд╛рд╣рд┐рдП:





рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реА Date('1901-01-01')



рдХреЙрд▓ Date('1901-01-01')



рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ date



, рдкрд╛рдпрдерди рдореЗрдВ date



рдФрд░ datetime



рдЗрддреНрдпрд╛рджрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреАред



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



рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдбреЗрдЯрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХреЛрдб рдХреЗ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ:



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



 var handlers = { Date: function (ctx, v) { return new Date(v); }, Complex: function (ctx, real, imag) { return new Complex(real, imag); }, ArrayBuffer: function (ctx, v) { return base64DecToArr(v).buffer; }, Person: function (ctx, personDataDict) { return new Person(personDataDict); } }; //    ,        var person = new JsonexParser(handlers).parse( "Person({"+ " name: 'John',"+ " dateOfBirth: Date('1901-01-01'),"+ " i: Complex(0, 1),"+ " song: ArrayBuffer('Q2FsbCBub3RhdGlvbiBpcyBjb29sIQ=='),"+ "})" );
      
      





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



рдкреНрд░рд╕рдВрдЧ



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, ctx



рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рд╕рдВрдЧ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ ctx



рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╖ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:





рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣реИрдВрдбрд▓рд░ рдХреЛ get



рдФрд░ set



рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:



 var handlers = { //         set: function (ctx, key, data) { ctx.box = ctx.box || {}; ctx.box[key] = data; return data; }, //  ,    get: function (ctx, key) { return ctx.box ? ctx.box[key] : undefined; } }; var data = new JsonexParser(handlers).parse( "[ set('x', { a: 'a' }), get('x') ]" ); data[0].a = 5; //  data[0]  data[1]         console.log(JSON.stringify(data)); // [{"a":5},{"a":5}]
      
      





рд╕рдВрдЪрд╛рд░ jsonex рдФрд░ рдЬреЗрдПрд╕



JSON рдХреА рддрд░рд╣, jsonex JS рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рдЬреЗрдПрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╕рд┐рдиреНрдереЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ рдФрд░ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬреЗрдПрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдиреЛрдЯреЗрд╢рди рдХреЛ рдЧрдгрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП



 [ foo(), bar.baz() // , jsonex      ]
      
      





рдПрдХ рдорд╛рдиреНрдп рдФрд░, рдЕрдзрд┐рдХ, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреЗрдПрд╕-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ foo



рдФрд░ bar



рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред



рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ eval()



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



рдХрдореНрдкреНрдпреВрдЯреЗрдмрд▓ рдбреЗрдЯрд╛ (рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛)



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



 getUsers([1, 15, 7])
      
      





рд╕рд░реНрд╡рд░ рдЙрдЪрд┐рдд рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:



 var handlers = { getUsers: function (ctx, userIds) { var listOfUsers = getUsersFromDbOrWhatever(userIds); return listOfUsers; } };
      
      





рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо jsonex рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреЗрдВ:



 [ User({id: 1, name: 'John', ...}), ...]
      
      







рдЧреНрд░рд╛рд╣рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдИрдорд╛рдирджрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рд╕рд░реНрд╡рд░ jsonex рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рдЖрдкрдХреЛ url рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, GET рдФрд░ POST рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред



рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рджреЗрдЦреЗрдВ



рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдХреЙрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред "getUsers([1, 15, 7])"



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



 var getUsers = function (userIds) { return new jsonex.Call('getUsers', userIds); //   }; //     jsonex.stringify(getUsers([1, 15, 7])); // 'getUsers([1,15,7])'
      
      





рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



 server.ask( getUsers([1, 15, 7]), //  function (err, result) { //   ... } );
      
      





server.ask()



рдХреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:





рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ getUsers()



рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рдЯрд╛рдЗрдк jsonex.Call



рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 'getUsers([1,15,7])'







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



рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИ, рддреЛ server.ask()



рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рджреА рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдмреИрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдХрд╛ рддреИрдпрд╛рд░-рд╕реЗ-рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред



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



рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:



 UnexpectedError('Error details message')
      
      





рд╣реИрдВрдбрд▓рд░ рдЙрджрд╛рд╣рд░рдг:



 handlers.UnexpectedError = function(ctx, msg) { return new ServerError(msg); // ServerError    Error };
      
      





рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдбреЗрдЯрд╛ рдХреЗ рд▓рд╛рдн



рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдбреЗрдЯрд╛ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ:





рдПрдХ рдмреИрдЪ рдЕрдиреБрд░реЛрдз, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



 [ getFoo(), getBar(1, 2, 3), ]
      
      





рдЬрд╡рд╛рдм рдореЗрдВ, getFoo()



рдФрд░ getBar()



рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдЖрдПрдЧреАред



рд╣рдо рджреВрд╕рд░реЗ рдореЗрдВ рдПрдХ рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:



 [ set('x', getUserBooks(17)), //    17 getAuthors( //    getProps( //   'authorId'     get('x') get('x'), 'authorId' ) ), ]
      
      





рдЙрддреНрддрд░ рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдЗрди рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреАред

рдиреЛрдЯ: рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЙрд▓рд┐рдВрдЧ getProps()



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



рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░:



 [ 137, // ,  , , id  someRequest(...) ]
      
      





рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 137 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреА рдФрд░ рдХреБрдЫ рдХреЙрд▓рд┐рдВрдЧ someRequest()



рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред

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



рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред



рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдЕрдВрддрд░рдг:



 last( //    metaInfo('   ', 1, 3, 4), someRequest(...) )
      
      





рдпрд╣рд╛рдБ, metaInfo()



рдХреЙрд▓ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рдЙрддреНрддрд░ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ last()



рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред



HTTP рдФрд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ



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



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



рдбреЗрдЯрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ, HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕рд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ jsonex рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, GET, HEAD рдпрд╛ DELETE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ URL рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рд╕реНрддрд╛ рддрд░реАрдХрд╛ рд╣реИ - рдПрдХрд▓ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ jsonex рдкрд╛рд╕ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП query



ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреБрд░реЛрдз getUsers([1,2,3])



рдХреЙрд▓ рдХреЛ рдкрддреЗ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ example.com/api?query=getUsers%28%5B1%2C2%2C3%5D%29







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



рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк HTTP рд╣реЗрдбрд░ рдФрд░ jsonex рджреЛрдиреЛрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 last( authToken('myAuthToken'), //   ,   someOtherHeader('blah blah'), getUsers([1, 15]) )
      
      





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



HTTP рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╢рд╛рд▓реАрдирддрд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рдЧреБрдг HTTP рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреЗрд░реЛрдЬрдЧрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдп рдирд╣реАрдВред рдЪреВрдБрдХрд┐ jsonex рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ idempotent рдФрд░ non-idempotent рдХреЙрд▓реНрд╕ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдРрд╕реЗ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдзреНрд╡рдЬ рдХреЛ рд▓рд╛рдж рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрд╡реНрдпрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдореЗрдВ рдЬрд╛рдВрдЪреЗрдВ:



 var handlers = { idempotent: function (ctx) { ctx.mustBeIdempotent = true; }, updateUser(ctx, userData) { if (ctx.mustBeIdempotent) { throw new NonIdempotentCallError('updateUser'); } ... } };
      
      





рдЕрдиреБрд░реЛрдз рдЙрджрд╛рд╣рд░рдг:



 last( idempotent(), [ getUsers([1,2]), updateUser({id:1, ...}) //   ] )
      
      





рдХреЙрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕реА рдмреЗрдХрд╛рд░ рд╣реИрдВ, рдпрд╣ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП idempotent()



рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ idempotent()



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



рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рдмрд╛рддреЗрдВ



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





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



 handlers.expesiveCall = function (ctx, args...) { ctx.cost += calcCost(args...); if (ctx.cost > ctx.costThreshold) { throw new TooExpensiveError(); } ... } };
      
      





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



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



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



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



рдЪрд░рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЗрд╡рд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрд╛ Date()



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



JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡



рдпрджрд┐ рдЖрдк рдЕрднреА jsonex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ - JSON рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди jsonex рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрднреА рддрдХ рдЗрддрдиреЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ) рд▓реЗрдХрд┐рди рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ jsonex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред jsonex рддреАрди рд╕рд░рд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ JSON рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:



 //   f(...) => {"?": ["f", ...]} //   '?' {'?': value, ...} => {"?": ["?", value], ...} //  ,    f({...}) => {"?": "f", ...}
      
      





рдкрд╣рд▓рд╛ рдирд┐рдпрдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреЙрд▓ рдиреЛрдЯреЗрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрдкрддреНрддрд┐ рд╣реИ? ' рд╡рд┐рд╢реЗрд╖ рдорд╣рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдирд┐рдпрдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд рд╢рдмреНрджрдХреЛрд╢ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП? ' рддреЛ рдпрд╣ рдХреЙрд▓ рд╕рдВрдХреЗрддрди рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдФрд░ рддреАрд╕рд░рд╛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╣реИ, рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЛрдЯреЗрд╢рди рдХреЙрд▓ рдиреЛрдЯреЗрд╢рди рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдПрдХ рд╣реА рддрд░реНрдХ рд╣реИ рдФрд░ рдпрд╣ рддрд░реНрдХ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИред рдпрд╣рд╛рдБ jsonex рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



 Person({ //  Person name: 'John', dateOfBirth: Date('1901-01-01'), i: Complex(0, 1), d: { '?': 123 } })
      
      





JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:



 { "?": "Person", "name": "John", "dateOfBirth": {"?": ["Date", "1901-01-01"]}, "i": {"?": ["Complex", 0, 1]}, "d": {"?": ["?", 123]} }
      
      







JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЖрдк JSON.parse()



рдорд╛рдирдХ JSON.parse()



рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛, рдХреБрдЫ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕реЗ рд╕реАрдзреЗ JSON.parse () рдХреЛ рджрд┐рдП рдЧрдП рд░рд┐рд╡рд╛рдЗрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд╣реА JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ JSON.stringify () рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рдкреНрд░рддрд┐рдХреГрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред



рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдХрдореНрдкреНрдпреВрдЯреЗрдмрд▓ рдбреЗрдЯрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓



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



 [ set('x', getUserBooks(17)), getAuthors(getProps(get('x'), 'authorId')), ]
      
      





getUserBooks()



рдФрд░ getAuthors()



рдХреЛ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, I / O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛред рдЗрд╕рд▓рд┐рдП рд╣рдо рдореМрдХреЗ рдкрд░ рдЙрдирдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдВрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рднреА рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдирд╣реАрдВред



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



рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреБрдЫ рдХреЙрд▓ рдХреА рдЧрдгрдирд╛ рджреВрд╕рд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ; рд╣рдо рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ set()



рдЬрдм рддрдХ рд╣рдо рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ getUserBooks()



ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ set()



, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рдЧрдгрдирд╛ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрди рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рди рдкрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рд╡реЗ рддреИрдпрд╛рд░ рд╣реЛрдВ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ set()



ред рдпрд╣рд╛рдВ рд╣рдо рдареАрдХ рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдЧрдгрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ - getUserBooks()



рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕рдВрднрд╡ рд╣реИрдВред



рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИредрдПрдХ рдХреЙрд▓ get()



рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рддрдХ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ set()



ред рдЗрд╕рд▓рд┐рдП, get()



рдпрд╣ рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рдЧрдгрдирд╛ рднреА рдмрди рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рд╕рдордп рд╕реЗ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ set()



ред рдмрджрд▓реЗ рдореЗрдВ, getProps()



рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ get()



, рд▓реЗрдХрд┐рди getAuthors()



рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ getProps()



ред



рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдХреЛ рдЗрди рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА рд▓рдВрдмрд┐рдд рдЧрдгрдирд╛рдУрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдЖрд░реНрдХ



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



рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдЯреЛрдХрди рдХреА рдПрдХ рдзрд╛рд░рд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЯреЛрдХрди рдХреЗрд╡рд▓ JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ jsonex рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХреЛрдиреЗ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣реИред рдЖрд░реНрдХ Node.js рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ browserify ред рдЪрд╛рдк рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдмрд╕ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХреЛ рдЙрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ, рдФрд░ рдЗрдВрдЬрди рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╕рд╛рд░реА рдореЗрд╣рдирдд рдХрд░реЗрдЧрд╛:



 handlers.getUserBooks = function (ctx, userId) { return ctx.async(function (cb) { doSomethingAsync(...args, cb); }); };
      
      





рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ рдХреЙрд▓рдмреИрдХ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рд╕рд╛рде рд╣реА jsonex рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдФрд░ JSON рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдЕрдиреБрдкреВрд░рдХ

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



рдФрд░ рдП + рд╡рд╛рджрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдгJSON.parse()



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



 var parser = new JSONEX.parser({ allow_async: true, functions: { Foo: function() { var result = $.Deferred(); setTimeout(function() { result.resolve("Hello, world!"); }, 1000); return result.promise(); } }}); $.when(parser.parse('[{"?": ["Foo"]}]')) .done(function(result) { console.log(result); });
      
      





рдирд┐рд╖реНрдХрд░реНрд╖



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



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



All Articles