
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрдпрд╛ рд╣реИ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдордп рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рдХрд░рдирд╛ред PHP рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп PHP рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реАрдорд╛ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рд╣рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдордиреНрд╡рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреЗрд╢ рд╣реИ рд╕реНрдХрд╛рдИреЗрдВрдЧ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рд╕рд░реНрдЧреЗрдИ рдЭреВрдХ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рджред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдо рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ "рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред" рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛рдПрдВ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреАрдПрдЪрдкреА рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд░рд┐рдПрдХреНрдЯрдкреАрдИрдкреА рдФрд░ рдПрдореНрдк рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ ReactPHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╡рд╛рджрд╛
рд╡рд╛рджреЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдЖрдПрдЧрд╛ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рдореИрдХрдбреЙрдирд▓реНрдбреНрд╕ рдореЗрдВ рд╣реИрдВ рдФрд░ рдПрдХ рдСрд░реНрдбрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд╕реЗ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдирджреЗрди рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдЖрдкрдХреЛ рд╣реИрдордмрд░реНрдЧрд░ рдФрд░ рдлреНрд░рд╛рдЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд▓реЗрдХрд┐рди рдЦрдЬрд╛рдВрдЪреА рддреБрд░рдВрдд рднреЛрдЬрди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдСрд░реНрдбрд░ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЬрд╛рдБрдЪ рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рджрд╛ рдорд╛рдиреЗрдВред рдЕрдм рдЖрдк рдЗрд╕ рдЬрд╛рдВрдЪ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдордмрд░реНрдЧрд░ рдФрд░ рдлреНрд░реЗрдВрдЪ рдлреНрд░рд╛рдЗрдЬрд╝ рдЕрднреА рддрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЦрдбрд╝реЗ рд░рд╣реЗрдВ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдЖрджреЗрд╢ рдкреВрд░рд╛ рди рд╣реЛ рдЬрд╛рдПред рдЬреИрд╕реЗ рд╣реА рдЙрд╕рдХрд╛ рдирдВрдмрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЖрдк рдЕрдкрдиреЗ рдСрд░реНрдбрд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред рдпреЗ рд╡рд╛рджреЗ рд╣реИрдВ:
рднрд╡рд┐рд╖реНрдп рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдкрдиреНрдиред
рдПрдХ рд╡рд╛рджрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрд░реНрде рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, рдПрдХ рд╕рдордп-рд╕реНрд╡рддрдВрддреНрд░ рдЖрд╡рд░рдг рдЬреЛ рд╣рдо рдПрдХ рдЕрд░реНрде рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдпрджрд┐ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдБ рд╣реИ рдпрд╛ рдирд╣реАрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд░рд╣рддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ HTTP рдЕрдиреБрд░реЛрдз рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ "рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд▓рдЧрднрдЧ рдПрдХ рд╕рдордп рдкрд░ рдкреВрд░рд╛ рд╣реЛ рд╕рдХреЗрдВред рд▓реЗрдХрд┐рди рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЙрдирдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдХрд╛ рд╕рдордиреНрд╡рдп рдФрд░ рдЖрдпреЛрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрди рдЙрддреНрддрд░реЛрдВ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╛рдореВрд▓реА рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рд╛рде: рджреВрд╕рд░реЗ рдЙрддреНрддрд░ рдХреЛ рддрдм рддрдХ рди рдЫрд╛рдкреЗрдВ рдЬрдм рддрдХ рдХрд┐ рдкрд╣рд▓рд╛ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ $ рд╡рд╛рджрд╛ 1 рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ $ рд╡рд╛рджрд╛ 2 рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ $ рд╡рд╛рджрд╛ 1 рдЕрднреА рднреА рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рддреАрди рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡реЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрдиреБрд░реЛрдз рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред
рддреЛ, рд╣рдо рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рдРрд╕реЗ рддреАрди рд╡рд╛рджреЗ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдлрд░реНрдЬреА рдХреЛрдб рджрд┐рдП рдЧрдП рд╣реИрдВ:
<?php use React\Promise\Promise; function fakeResponse(string $url, callable $callback) { $callback("response for $url"); } function makeRequest(string $url) { return new Promise(function(callable $resolve) use ($url) { fakeResponse($url, $resolve); }); }
рдпрд╣рд╛рдБ рдореЗрд░реЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ:
fakeResponse (рд╕реНрдЯреНрд░рд┐рдВрдЧ $ url, рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп $ рдХреЙрд▓рдмреИрдХ) рдореЗрдВ рдПрдХ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрд▓рдмреИрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
makeRequest (string $ url) рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ, рд╣рдо рдмрд╕ рдореЗрдХ рд░реЗрдпрд░реЗрд╕реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рджреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
<?php $promise1 = makeRequest('url1'); $promise2 = makeRequest('url2'); $promise3 = makeRequest('url3');
рдпрд╣ рд╕рд░рд▓ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЗрди рдЙрддреНрддрд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рджреВрд╕рд░реЗ рд╡рд╛рджреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫрдкреЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
<?php $promise1 ->then('var_dump') ->then(function() use ($promise2) { return $promise2; }) ->then('var_dump') ->then(function () use ($promise3) { return $promise3; }) ->then('var_dump') ->then(function () { echo 'Complete'; });
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо $ рд╡рд╛рджреЗ 1 рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ: рдПрдХ рд╕реЗрдХрдВрдб рдпрд╛ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдХрдоред рдЬреИрд╕реЗ рд╣реА рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛрдЧрд╛, рд╣рдо рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рдЫрд╛рдкреЗрдВрдЧреЗред рдФрд░ рдлрд┐рд░ рд╣рдо $ рд╡рд╛рджреЗ 2 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рджреЛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
$ рд╡рд╛рджрд╛ 2 рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ;
$ рд╡рд╛рджрд╛ 2 рдЕрднреА рднреА рдкреВрд░рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡рд╛рджреЛрдВ рдХреА рдЬрдВрдЬреАрд░ рдХреА рдмрджреМрд▓рдд рд╣рдореЗрдВ рдЕрдм рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд╛рджреЗ рдкреВрд░реЗ рд╣реБрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдкреНрд░реЙрдорд┐рд╕ рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╣рдорд╛рд░реЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╣рдорд╕реЗ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░рд╛ рдпрд╛ рд░рджреНрдж)ред
рдЗрд╕ рддрд░рд╣ рдЖрдк рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд╡рд╛рджреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЬрдирд░реЗрдЯрд░
PHP рдореЗрдВ, рдЬрдирд░реЗрдЯрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░, рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рд╣рд░, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕рднреА рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЬрд╛рджреВ рдФрд░ рд╢рдХреНрддрд┐ рд╣реИред
рд╣рдо рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рджреЛрдВ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╡реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдо рдЬрдирд░реЗрдЯрд░ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рд╕рд┐рд░реНрдл рдЙрдкрдЬ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╡рд╛рджреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ:
<?php use Recoil\React\ReactKernel;
рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА recoilphp / recoil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ ReactKernel :: start () рдХрд╣рддреЗ рд╣реИрдВ ред рд░реЗрдХреЛрдЗрд▓, PHPct рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ReactPHP рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд╛рджреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рд╣рдо рдЕрднреА рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рддреАрди рдкреНрд░рд╢реНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЙрдкрдЬ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рджреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рджред
Korutiny
рдХреЛрд░рдЖрдЙрдЯ рдПрдХ рдСрдкрд░реЗрд╢рди рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд┐рдЦрдВрдбреВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрдВрдХ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрдиред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреВрд░реЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдардВрдб рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ), рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рддрдм рддрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реБрдХрд╛рд╡рдЯ рдФрд░ рдирд╡реАрдХрд░рдгреАрдп рдЬрдирд░реЗрдЯрд░ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рдореЗрдВ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PHP рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЙрд▓рдмреИрдХ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдПрдХ рд╡рд╛рджрд╛ (рдЙрдкрдЬ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХреЛрд░рдЯрд╛рдЗрди рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред Corutin рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ (рдкреВрд░рд╛ рд╣реЛрдиреЗ рдпрд╛ рд░рджреНрдж) рд╣реЛрдиреЗ рддрдХ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реБрдЖ, рдХреЛрд░рдЯрд╛рдЗрди рдкреВрд░рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рдХреЙрд░рдЯреАрди рд╡рд╛рджрд╛ рдЬрдирд░реЗрдЯрд░ рдореВрд▓реНрдп рдХреЛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрддрд╛ рд╣реИ :: рдЬрдирд░реЗрдЯрд░ (рднреЗрдЬреЗрдВ рдореВрд▓реНрдп) рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдпрджрд┐ рд╡рд╛рджрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрдирд░реЗрдЯрд░ :: рдереНрд░реЛ () рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд░рдЯрд┐рди рдЬрдирд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓рдЧрднрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди
рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдЕрдм рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдХреЛрдб рдХреЛ рдареАрдХ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдкрдЬ рдХреАрд╡рд░реНрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
<?php use Recoil\React\ReactKernel;
рд╡рд╛рджрд╛ 1: рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдЗрдВрддрдЬрд╛рд░ рд╣реЛрдЧрд╛ред рдЬреИрд╕реЗ рд╣реА MakeRequest ('url1') рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЙрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рдкреНрд░реЙрдорд┐рд╕ / рдП + рдкреНрд░реЙрдорд┐рд╕ рд╕реНрдЯреИрдВрдбрд░реНрдб рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЙрдорд┐рд╕ рдореЗрдВ рддрдм () рдФрд░ рдХреИрдЪ () рддрд░реАрдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЛ рд╡рд╛рджреЛрдВ рд╕реЗ рдЪреЗрди рдмрдирд╛рдиреЗ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
<?php operation()->then(function ($result) { return anotherOperation($result); })->then(function ($result) { return yetAnotherOperation($result); })->then(function ($result) { echo $result; });
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓реЗ рд╡рд╛рджреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдЧрд▓реЗ рддрдХ рдкрд╣реБрдВрдЪрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреЛрдИ рдкрдХрдбрд╝ () рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдЬрдм рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдирд┐рдХрдЯрддрдо рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрдХрд╛рдпрд╛ рд╡рд╛рджреЗ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлреЗрдВрдХреА рдЧрдИ рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧреАред рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╕рд╛рде, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
<?php use Recoil\React\ReactKernel; use React\Promise\RejectedPromise;
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдкрдардиреАрдп рдмрдирд╛рдирд╛
рдЬреЗрдирд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рд▓рдЧрд╛рддрд╛рд░ рд╕реНрд╡рд┐рдЪ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рджрд┐рди рдХреА рд▓рдЧрд╛рддрд╛рд░ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ: рдПрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рджреВрд╕рд░рд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд▓реЗрдХрд┐рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рд▓рдЧ рд╕рдХрддреА рд╣реИ:
<?php $promise1 ->then('var_dump') ->then(function() use ($promise2) { return $promise2; }) ->then('var_dump') ->then(function () use ($promise3) { return $promise3; }) ->then('var_dump') ->then(function () { echo 'Complete'; });
рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрдЯрд░реНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЬрдирд░реЗрдЯрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬреИрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗред
рд╡рд╛рджреЗ рдФрд░ рдЬрдирд░реЗрдЯрд░ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: рд╣рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ, рд░реИрдЦрд┐рдХ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред Coroutines рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд░реИрдЦрд┐рдХ рдФрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗред
рдпрджрд┐ рд╣рдо ReactPHP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рджреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП RecoilPHP рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Amp рдореЗрдВ, рдмреЙрдХреНрд╕ рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рдХреЙрд░рдкреЗрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред