{"id":266748,"date":"2015-10-26T08:53:02","date_gmt":"2015-10-26T05:53:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=266748"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=266748","title":{"rendered":"\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438"},"content":{"rendered":"<p>       <i>\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u041d\u043e\u043b\u0430\u043d\u0430 \u041b\u043e\u0443\u0441\u043e\u043d\u0430 \u00ab<a href=\"http:\/\/pouchdb.com\/2015\/05\/18\/we-have-a-problem-with-promises.html\">\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438<\/a>\u00bb, \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u043e \u0442\u0435\u043c\u0435 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u043c\u043d\u0435 \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c.<\/i><\/p>\n<h3>\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438<\/h3>\n<p>  \u0414\u043e\u0440\u043e\u0433\u0438\u0435 JavaScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043d\u0430\u0441\u0442\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c \u044d\u0442\u043e \u2014 \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0435\u0442, \u043d\u0435 \u0441 \u0441\u0430\u043c\u0438\u043c\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438. \u0418\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e <a href=\"https:\/\/promisesaplus.com\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 A+<\/a> \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0430\u043c\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0437\u0430 \u0433\u043e\u0434\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0431\u043e\u0440\u044e\u0442\u0441\u044f \u0441 \u0431\u043e\u0433\u0430\u0442\u044b\u043c\u0438 \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u044b API, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:<\/p>\n<p>  \u2014 \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0431\u0435\u0437 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0445 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u043d\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435, \u0440\u0435\u0448\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443:<\/p>\n<p>  <b>\u0412\u043e\u043f\u0440\u043e\u0441: \u0412 \u0447\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432?<\/b><\/p>\n<pre><code class=\"javascript\">doSomething().then(function () {   return doSomethingElse(); });  doSomething().then(function () {   doSomethingElse(); });  doSomething().then(doSomethingElse());  doSomething().then(doSomethingElse); <\/code><\/pre>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442, \u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u0430\u0441 \u043f\u043e\u0437\u0434\u0440\u0430\u0432\u0438\u0442\u044c \u2014 \u043f\u043e \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0432\u044b \u043d\u0438\u043d\u0437\u044f. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0434\u0430\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0432\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c 99,99% \u0438\u0437 \u0432\u0430\u0441 \u044f \u0441\u043f\u0435\u0448\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u0440\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438\u0441\u044c, \u0432\u044b \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041d\u0438\u043a\u0442\u043e \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 <a href=\"https:\/\/twitter.com\/nolanlawson\/status\/578948854411878400\">\u043c\u043e\u0439 \u0442\u0432\u0438\u0442<\/a>, \u043d\u0435 \u0441\u043c\u043e\u0433 \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u0414\u0430\u0436\u0435 \u044f \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u0438\u0432\u043b\u0435\u043d \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u043d\u0430 3-\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u0414\u0430-\u0434\u0430, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u044f \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u043b!<\/p>\n<p>  \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0430\u0441, \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u044b, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u0445 \u043b\u043e\u0432\u0443\u0448\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u043c \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u0434\u0438\u043d \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b. \u0418, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043c\u043e\u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0430\u043c \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u043c\u0438\u0441\u044b?<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445, \u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c \u043e\u0442\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u00ab<a href=\"https:\/\/medium.com\/@wavded\/managing-node-js-callback-hell-1fe03ba8baf\">\u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0443 \u0437\u043b\u0430<\/a>\u00bb (\u00abpyramide of doom\u00bb \u0432 \u043e\u0440\u0438\u0433.), \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0443\u0436\u0430\u0441\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0437\u0430 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>  \u041f\u0440\u043e\u043c\u0438\u0441\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u044e\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432. \u041a\u0430\u043a \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0435\u0441\u0435\u0434\u0435 \u00ab<a href=\"http:\/\/www.youtube.com\/watch?v=hf1T_AONQJU\">\u0421\u043f\u0430\u0441\u0435\u043d\u0438\u0435 \u0438\u0437 \u0430\u0434\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432<\/a>\u00bb, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043b\u0438\u0448\u0430\u044e\u0442 \u043d\u0430\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <b>return<\/b> \u0438 <b>throw<\/b>. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043b\u043e\u0432\u0435\u0449\u0435\u0435, \u043e\u043d\u0438 \u043b\u0438\u0448\u0430\u044e\u0442 \u043d\u0430\u0441 \u0441\u0442\u0435\u043a\u0430, \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e\u0435. \u041f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u0441\u0442\u0435\u043a\u0430 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0431\u0435\u0437 \u043f\u0435\u0434\u0430\u043b\u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u0430. \u0412\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u0432\u0430\u0436\u043d\u0430 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043e\u043d\u0430 \u0432\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438 \u0435\u0435 \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c: <b>return<\/b>, <b>throw<\/b> \u0438 \u0441\u0442\u0435\u043a. \u041d\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<h2>\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432<\/h2>\n<p>  \u041a\u0442\u043e-\u0442\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b <a href=\"http:\/\/andyshora.com\/promises-angularjs-explained-as-cartoon.html\">\u0432 \u0432\u0438\u0434\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043a\u0430<\/a> \u0438\u043b\u0438, \u0433\u043e\u0432\u043e\u0440\u044f \u0441\u043b\u043e\u0432\u0430\u043c\u0438: <i>\u00ab\u041e! \u042d\u0442\u043e \u0448\u0442\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u044e\u0434\u0443, \u0430 \u043e\u043d\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u00bb<\/i>.<\/p>\n<p>  \u042f \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u0442\u0430\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u0434\u0430, \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u0442\u0435\u0440\u043c\u0438\u043d \u00ab\u043f\u0440\u043e\u043c\u0438\u0441\u044b\u00bb \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0440\u0430\u0437\u043d\u044b\u0439 \u0441\u043c\u044b\u0441\u043b. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431 <a href=\"https:\/\/promisesaplus.com\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/a>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043a\u0430\u043a <b>window.Promise<\/b>. \u0414\u043b\u044f \u0442\u0435\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 <b>window.Promise<\/b>, \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043e\u043b\u0438\u0444\u0438\u043b \u0441 \u043d\u0430\u0445\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/calvinmetcalf\/lie\">Lie<\/a> (\u043b\u043e\u0436\u044c), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u21161 \u2014 \u00ab\u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430 \u0437\u043b\u0430\u00bb \u0438\u0437 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432<\/h3>\n<p>  \u0413\u043b\u044f\u0434\u044f, \u043a\u0430\u043a \u043b\u044e\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 PouchDB, API \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445, \u044f \u0432\u0438\u0436\u0443 \u043d\u0435\u043c\u0430\u043b\u043e \u043f\u043b\u043e\u0445\u0438\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"javascript\">remotedb.allDocs({   include_docs: true,   attachments: true }).then(function (result) {   var docs = result.rows;   docs.forEach(function(element) {     localdb.put(element.doc).then(function(response) {       alert(&quot;Pulled doc with id &quot; + element.doc._id + &quot; and added to local db.&quot;);     }).catch(function (err) {       if (err.status == 409) {         localdb.get(element.doc._id).then(function (resp) {           localdb.remove(resp._id, resp._rev).then(function (resp) { \/\/ \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435\u2026 <\/code><\/pre>\n<p>  \u0414\u0430, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u043b\u0431\u044d\u043a\u0438, \u0438 \u0434\u0430, \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0440\u0435\u043b\u044f\u0442\u044c \u0438\u0437 \u043f\u0443\u0448\u043a\u0438 \u043f\u043e \u0432\u043e\u0440\u043e\u0431\u044c\u044f\u043c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u044f \u0432\u0430\u0441 \u0443\u0434\u0438\u0432\u043b\u044e \u2014 \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/blackberry\/BB10-WebWorks-Community-Samples\/blob\/d6ee75fe23a10d2d3a036013b6b1a0c07a542099\/pdbtest\/www\/js\/index.js\">\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435<\/a> \u0432\u0437\u044f\u0442 \u0438\u0437 <a href=\"http:\/\/devblog.blackberry.com\/2015\/05\/connecting-to-couchbase-with-pouchdb\/\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u0433\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 BlackBerry<\/a>! \u041e\u0442 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0442\u0440\u0443\u0434\u043d\u043e.<\/p>\n<p>  \u0412\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0448\u0435:<\/p>\n<pre><code class=\"javascript\">remotedb.allDocs(...)   .then(function (resultOfAllDocs) {     return localdb.put(...);   })   .then(function (resultOfPut) {     return localdb.get(...);   })   .then(function (resultOfGet) {     return localdb.put(...);   })   .catch(function (err) {     console.log(err);   }); <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u044b (\u00abcomposing promises\u00bb \u0432 \u043e\u0440\u0438\u0433.) \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0438\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u043c\u0438\u0441 \u00ab\u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f\u00bb, \u0438 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u21162 \u2014 \u043a\u0430\u043a \u043c\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c forEach() \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438?<\/h3>\n<p>  \u042d\u0442\u043e \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e\u043c \u043b\u044e\u0434\u0435\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0434\u0430\u0432\u0430\u0442\u044c. \u041e\u043d\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 <b>forEach<\/b>, <b>for<\/b> \u0438\u043b\u0438 <b>while<\/b>, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u0438 \u043c\u0430\u043b\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c \u0438\u0445 \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438. \u0422\u043e\u0433\u0434\u0430 \u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"javascript\">\/\/ \u042f \u0445\u043e\u0447\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c remove() \u043a\u043e \u0432\u0441\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c db.allDocs({include_docs: true})   .then(function (result) {     result.rows.forEach(function (row) {       \/\/ \u041c\u0435\u0442\u043e\u0434 remove \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 promise       db.remove(row.doc);     });   })   .then(function () {     \/\/ \u0410 \u0437\u0434\u0435\u0441\u044c \u044f \u043d\u0430\u0438\u0432\u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u0436\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u044b!   }); <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c? \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <b>undefined<\/b>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0436\u0434\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <b>db.remove()<\/b> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0436\u0434\u0435\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043e \u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0432\u0430\u0440\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0411\u0430\u0433\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>  \u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 <b>forEach<\/b>, <b>for<\/b> \u0438 <b>while<\/b> <i>\u00ab\u043d\u0435 \u0442\u0435 \u0434\u0440\u043e\u043d\u044b, \u0447\u0442\u043e \u0432\u044b \u0438\u0449\u0435\u0442\u0435\u00bb<\/i>. \u0412\u0430\u043c \u043d\u0443\u0436\u0435\u043d <b>Promise.all()<\/b>:<\/p>\n<pre><code class=\"javascript\">db.allDocs({include_docs: true})   .then(function (result) {     var arrayOfPromises = result.rows.map(function (row) {       return db.remove(row.doc);     });     return Promise.all(arrayOfPromises);   })   .then(function (arrayOfResults) {     \/\/ \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0442\u043e\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u044b!   }); <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? <b>Promise.all()<\/b> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u0441\u044f\u00bb, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b. \u042d\u0442\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0446\u0438\u043a\u043b\u0430 <b>for<\/b>.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043c\u0438\u0441 \u0438\u0437 <b>Promise.all()<\/b> \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u043c\u0438\u0441 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 <b>Promise.all()<\/b> \u00ab\u0437\u0430\u0440\u0435\u0434\u0436\u0435\u043a\u0442\u0438\u0442\u0441\u044f\u00bb, \u0442\u043e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u043c\u0438\u0441 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <b>rejected<\/b>.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u21163 \u2014 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c .catch()<\/h3>\n<p>  \u042d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u0431\u043b\u0430\u0436\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u0448\u0438 \u043f\u0440\u0438\u043c\u0438\u0441\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c <b>catch()<\/b> \u043a\u0443\u0434\u0430-\u043b\u0438\u0431\u043e \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0447\u0430\u0441\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u00ab\u043f\u0440\u043e\u0433\u043b\u043e\u0447\u0435\u043d\u044b\u00bb. \u0412\u044b \u0434\u0430\u0436\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u2014 \u043e\u0441\u043e\u0431\u0430\u044f \u0431\u043e\u043b\u044c \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u044f \u0432\u0437\u044f\u043b \u0437\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0440\u043e\u0441\u043b\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443, \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u043c\u043e\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u043c\u0435\u0442\u043e\u0434 <b>catch()<\/b>:<\/p>\n<pre><code class=\"javascript\">somePromise().then(function () {     return anotherPromise();   })   .then(function () {     return yetAnotherPromise();   })   \/\/ \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432:   .catch(console.log.bind(console)); <\/code><\/pre>\n<p>  \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <b>catch()<\/b> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c. \u041f\u043e\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0447\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0435\u0442\u0441\u044f, \u0432\u044b \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0441\u0435\u0431\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u21164 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u00abdeferred\u00bb<\/h3>\n<p>  \u0422\u0430\u043a\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u044f \u0432\u0438\u0436\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u043d\u0435 \u0445\u043e\u0447\u0443 \u0434\u0430\u0436\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043e\u043f\u0430\u0441\u0430\u044f\u0441\u044c, \u0447\u0442\u043e \u043e\u043d, \u043f\u043e\u0434\u043e\u0431\u043d\u043e <a href=\"https:\/\/afisha.mail.ru\/cinema\/movies\/625126_bitldzhus\/\">\u0411\u0438\u0442\u043b\u0434\u0436\u0443\u0441\u0443<\/a> \u0438\u0437 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u043c\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u043e \u0438 \u0436\u0434\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0432\u043e\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0432 \u0441\u0432\u043e\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043f\u0440\u043e\u0448\u043b\u0438 \u0434\u043e\u043b\u0433\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u0423 JavaScript \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0443\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 jQuery \u0438 Angular \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d deferred-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0431\u044b\u043b \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 ES6, \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u043b\u0438 \u00ab\u0445\u043e\u0440\u043e\u0448\u0438\u0435\u00bb \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Q, When, RSVP, Bluebird, Lie \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>  \u0412\u043e\u0431\u0449\u0435\u043c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435 (\u044f \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0435\u0433\u043e \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437!), \u0437\u043d\u0430\u0439\u0442\u0435 \u2014 \u0432\u044b \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043d\u0435 \u0442\u0430\u043a. \u041d\u0438\u0436\u0435 \u0440\u0435\u0446\u0435\u043f\u0442, \u043a\u0430\u043a \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u00ab\u043f\u0440\u043e\u043c\u0438\u0441\u043d\u044b\u0445\u00bb \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u0430\u044e\u0442 \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0434\u0443\u043b\u044c <b>$q<\/b> \u0438\u0437 Angular \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435-$q \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <b>$q.when()<\/b>. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Angular \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0438\u0437 PouchDB \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">\/\/ \u044d\u0442\u043e \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e: $q.when(db.put(doc)).then(\/* ... *\/); <\/code><\/pre>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0443\u0442\u044c \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/blog.domenic.me\/the-revealing-constructor-pattern\/\">\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430<\/a> (\u00abrevealing constructor pattern\u00bb \u0432 \u043e\u0440\u0438\u0433.). \u041e\u043d \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f API, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u043c\u0438\u0441\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u0430\u0445 API Node.js, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">new Promise(function (resolve, reject) {   fs.readFile('myfile.txt', function (err, file) {     if (err) {       return reject(err);     }     resolve(file);   }); }).then(\/* ... *\/) <\/code><\/pre>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u041c\u044b \u0440\u0430\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0441 \u0443\u0436\u0430\u0441\u043d\u044b\u043c defer\u2026 \u0410\u0445, \u0447\u0443\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043d\u0435\u0441 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437! \ud83d\ude42<\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u21165 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/h3>\n<p>  \u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c?<\/p>\n<pre><code class=\"javascript\">somePromise().then(function () {     someOtherPromise();   })   .then(function () {     \/\/ \u041e\u0445, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c someOtherPromise \u00ab\u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u043b\u0441\u044f\u00bb\u2026     \/\/ \u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u043d\u0435\u0442, \u043d\u0435 \u00ab\u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u043b\u0441\u044f\u00bb.   }); <\/code><\/pre>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445.<\/p>\n<p>  \u0421\u0435\u0440\u044c\u0435\u0437\u043d\u043e, \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0442\u0440\u044e\u043a, \u043f\u043e\u043d\u044f\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u044b \u0441\u0430\u043c\u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u0441\u0435\u0445 \u0442\u0435\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438. \u0412\u044b \u0433\u043e\u0442\u043e\u0432\u044b?<\/p>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u043c\u0430\u0433\u0438\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043d\u0430\u043c \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u044b\u0435 <b>return<\/b> \u0438 <b>throw<\/b>. \u041d\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435?<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u043c\u0438\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043c\u0435\u0442\u043e\u0434 <b>then()<\/b> (\u0430 \u0435\u0449\u0435 <b>catch()<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0441\u0430\u0445\u0430\u0440\u00bb \u0434\u043b\u044f <b>then(null, \u2026)<\/b>). \u0418 \u0432\u043e\u0442 \u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>then()<\/b>:<\/p>\n<pre><code class=\"javascript\">somePromise().then(function () {   \/\/ \u0412\u0430\u0443, \u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 then()! }); <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u0422\u0440\u0438 \u0432\u0435\u0449\u0438:<\/p>\n<ol>\n<li>\u0412\u0435\u0440\u043d\u0443\u0442\u044c (<b>return<\/b>) \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u043c\u0438\u0441<\/li>\n<li>\u0412\u0435\u0440\u043d\u0443\u0442\u044c (<b>return<\/b>) \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 <b>undefined<\/b>)<\/li>\n<li>\u0412\u044b\u0434\u0430\u0442\u044c (<b>throw<\/b>) \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443<\/li>\n<\/ol>\n<p>  \u0412\u043e\u0442 \u0438 \u0432\u0441\u0435, \u0432\u0435\u0441\u044c \u0442\u0440\u044e\u043a. \u041f\u043e\u0439\u043c\u0435\u0442\u0435 \u0435\u0433\u043e \u2014 \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u043e\u0432.<\/p>\n<h4>1. \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u043c\u0438\u0441<\/h4>\n<p>  \u042d\u0442\u043e \u0447\u0430\u0441\u0442\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"javascript\">getUserByName('nolan').then(function (user) {     \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f getUserAccountById \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 promise,     \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 then     return getUserAccountById(user.id);   })   .then(function (userAccount) {     \/\/ \u042f \u0437\u043d\u0430\u044e \u0432\u0441\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435!   }); <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u043c\u0438\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <b>return<\/b>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0434\u0435\u0441\u044c <b>return<\/b> \u2014 \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043b <b>getUserAccountById<\/b>, \u0442\u043e \u0434\u0430, \u0431\u044b\u043b \u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0431\u044b\u043b \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u0433\u0434\u0435 \u0431\u044b \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <b>then<\/b> \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u044b <b>undefined<\/b> \u0432\u043c\u0435\u0441\u0442\u043e \u0436\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e <b>userAccount<\/b>.<\/p>\n<h4>2. \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 undefined)<\/h4>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 <b>undefined<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u2014 \u0447\u0430\u0441\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0410 \u0432\u043e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0435\u0441\u0442\u044c \u043a\u044d\u0448 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u0445. \u041c\u044b \u043c\u043e\u0436\u0435\u043c:<\/p>\n<pre><code class=\"javascript\">getUserByName('nolan').then(function (user) {     if (inMemoryCache[user.id]) {       \/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c,       \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443       return inMemoryCache[user.id];     }     \/\/ \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c,     \/\/ \u0432\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u043c\u0438\u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430     return getUserAccountById(user.id);   })   .then(function (userAccount) {     \/\/ \u042f \u0437\u043d\u0430\u044e \u0432\u0441\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435!   }); <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0432\u0435 \u043d\u0435 \u043a\u0440\u0443\u0442\u043e? \u0412\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u0437 \u043a\u044d\u0448\u0430 \u0438\u043b\u0438 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u043e\u043b\u044c\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443, \u0438\u043b\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <b>return<\/b>, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 <b>undefined<\/b>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u0432\u0432\u0435\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0440\u043e\u0441\u043b\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>return<\/b> \u0432\u043d\u0443\u0442\u0440\u0438 then \u0438\u043b\u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <b>throw<\/b>. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435.<\/p>\n<h4>3. \u0412\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443<\/h4>\n<p>  \u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a <b>throw<\/b>. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u0438\u044f\u0442\u044c \u0435\u0449\u0435 \u044f\u0440\u0447\u0435. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0434\u0430\u0442\u044c (<b>throw<\/b>) \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"javascript\">getUserByName('nolan').then(function (user) {     if (user.isLoggedOut()) {       \/\/ \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0448\u0435\u043b \u2014 \u0432\u044b\u0434\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443!       throw new Error('user logged out!');     }     if (inMemoryCache[user.id]) {       \/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c,       \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443       return inMemoryCache[user.id];     }     \/\/ \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c,     \/\/ \u0432\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u043c\u0438\u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430     return getUserAccountById(user.id);   })   .then(function (userAccount) {     \/\/ \u042f \u0437\u043d\u0430\u044e \u0432\u0441\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435!   })   .catch(function (err) {     \/\/ \u0423\u043f\u0441, \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u043e \u043c\u044b \u043a \u043d\u0435\u0439 \u0433\u043e\u0442\u043e\u0432\u044b!   }); <\/code><\/pre>\n<p>  \u041d\u0430\u0448 <b>catch()<\/b> \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d, \u0438\u043b\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e, \u0435\u0441\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u0432\u044b\u0448\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <b>rejected<\/b>. \u0418 \u0441\u043d\u043e\u0432\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 <b>catch<\/b> \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u0431\u044b\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <b>JSON.parse()<\/b> \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u0432\u043d\u0443\u0442\u0440\u0438 <b>then()<\/b> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 <b>json<\/b> \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439. \u0421 \u043a\u043e\u043b\u0431\u044d\u043a\u0430\u043c\u0438 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u00ab\u043f\u0440\u043e\u0433\u043b\u043e\u0447\u0435\u043d\u0430\u00bb, \u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <b>catch()<\/b> \u043c\u044b \u0431\u0435\u0437 \u0442\u0440\u0443\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u043c \u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<h2>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0443\u0447\u0438\u043b\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0440\u044e\u043a \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p>  \u042d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u043e\u0448\u0438\u0431\u043e\u043a \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u00ab\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435\u00bb, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u0434\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u041e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u21161 \u2014 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u043e Promise.resolve()<\/h3>\n<p>  \u042f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432\u044b\u0448\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u044b \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043f\u0440\u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">new Promise(function (resolve, reject) {   resolve(someSynchronousValue); }).then(\/* ... *\/); <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043a\u043e\u0440\u043e\u0447\u0435:<\/p>\n<pre><code class=\"javascript\">Promise.resolve(someSynchronousValue).then(\/* ... *\/); <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u043d \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u043e\u0431\u0435\u043d, \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 API, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u043c\u0438\u0441\u044b:<\/p>\n<pre><code class=\"javascript\">function somePromiseAPI() {   return Promise.resolve()     .then(function () {       doSomethingThatMayThrow();       return 'foo';     })     .then(\/* ... *\/); } <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0438\u0437-\u0437\u0430 \u00ab\u043f\u0440\u043e\u0433\u043b\u043e\u0447\u0435\u043d\u043d\u044b\u0445\u00bb \u043e\u0448\u0438\u0431\u043e\u043a. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0431\u0435\u0440\u043d\u0435\u0442\u0435 \u0435\u0433\u043e \u0432 <b>Promise.resolve()<\/b>, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043f\u043e\u0439\u043c\u0430\u0435\u0442\u0435 \u0435\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <b>catch()<\/b>.<\/p>\n<p>  \u0415\u0449\u0435 \u0435\u0441\u0442\u044c <b>Promise.reject()<\/b>. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u0430 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <b>rejected<\/b>:<\/p>\n<pre><code class=\"javascript\">Promise.reject(new Error(\u2018\u041a\u0430\u043a\u0430\u044f-\u0442\u043e \u0443\u0436\u0430\u0441\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\u2019)); <\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u21162 \u2014 catch() \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0441 then(null, \u2026)<\/h3>\n<p>  \u0427\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e <b>catch()<\/b> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0441\u0430\u0445\u0430\u0440\u00bb. \u0414\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0438\u0436\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b:<\/p>\n<pre><code class=\"javascript\">somePromise().catch(function (err) {   \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 });  somePromise().then(null, function (err) {   \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 }); <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435 \u0443\u0436\u0435 \u043d\u0435 \u00ab\u0440\u0430\u0432\u043d\u044b\u00bb:<\/p>\n<pre><code class=\"javascript\">somePromise().then(function () {     return someOtherPromise();   })   .catch(function (err) {     \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0430   });  somePromise().then(function () {   return someOtherPromise(); }, function (err) {   \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 }); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u0448\u0435 \u00ab\u043d\u0435 \u0440\u0430\u0432\u043d\u044b\u00bb, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430:<\/p>\n<pre><code class=\"javascript\">somePromise().then(function () {     throw new Error('oh noes');   })   .catch(function (err) {     \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0439\u043c\u0430\u043d\u0430! :)   });  somePromise().then(function () {   throw new Error('oh noes'); }, function (err) {   \/\/ \u041e\u0448\u0438\u0431\u043a\u0430? \u041a\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430? O_o }); <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0444\u043e\u0440\u043c\u0430\u0442 <b>then(resolveHandler, rejectHandler)<\/b>, \u0442\u043e <b>rejectHandler<\/b> \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0443\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>resolveHandler<\/b>.<\/p>\n<p>  \u0417\u043d\u0430\u044f \u044d\u0442\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u0432\u0432\u0435\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <b>then()<\/b>, \u0430 \u0432\u0437\u0430\u043c\u0435\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0438\u0436\u0435 \u0432 \u0432\u0438\u0434\u0435 <b>catch()<\/b>. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u2014 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0432 <a href=\"http:\/\/mochajs.org\">Mocha<\/a>, \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0436\u0434\u0443 \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"javascript\">it('should throw an error', function () {   return doSomethingThatThrows().then(function () {     throw new Error('I expected an error!');   }, function (err) {     should.exist(err);   }); }); <\/code><\/pre>\n<p>  \u041a \u0441\u043b\u043e\u0432\u0443, <a href=\"http:\/\/mochajs.org\">Mocha<\/a> \u0438 <a href=\"http:\/\/chaijs.com\">Chai<\/a> \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445 API.<\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u21163 \u2014 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043f\u0440\u043e\u0442\u0438\u0432 \u0444\u0430\u0431\u0440\u0438\u043a \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432<\/h3>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0435\u0440\u0438\u044e \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <b>Promise.all()<\/b>, \u043d\u043e \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b <b>\u043d\u0435<\/b> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0421\u0433\u043e\u0440\u044f\u0447\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"javascript\">function executeSequentially(promises) {   var result = Promise.resolve();   promises.forEach(function (promise) {     result = result.then(promise);   });   return result; } <\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c. \u041f\u0440\u043e\u043c\u0438\u0441\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 <b>executeSequentially()<\/b>, \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0430\u0447\u043d\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u043c\u0438\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0432 \u043d\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u041e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u044b, \u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0444\u0430\u0431\u0440\u0438\u043a \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 <b>executeSequentially<\/b>:<\/p>\n<pre><code class=\"javascript\">function executeSequentially(promiseFactories) {   var result = Promise.resolve();   promiseFactories.forEach(function (promiseFactory) {     result = result.then(promiseFactory);   });   return result; } <\/code><\/pre>\n<p>  \u042f \u0437\u043d\u0430\u044e, \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0443\u043c\u0430\u0435\u0442\u0435: <i>\u00ab\u041a\u0442\u043e, \u0447\u0435\u0440\u0442 \u0432\u043e\u0437\u044c\u043c\u0438, \u044d\u0442\u043e\u0442 Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043c \u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u0445?\u00bb<\/i>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u043c\u0438\u0441:<\/p>\n<pre><code class=\"javascript\">function myPromiseFactory() {   return somethingThatCreatesAPromise(); } <\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u0410 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u0440\u043e\u043c\u0438\u0441 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0434\u043e \u043d\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a <b>resolveHandler<\/b> \u0434\u043b\u044f <b>then()<\/b>.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>executeSequentially()<\/b> \u0438 \u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <b>promiseFactory<\/b> \u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0434 \u0432\u0430\u0448\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e \u0432\u0441\u043f\u044b\u0445\u043d\u0443\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \ud83d\ude42<\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u21164 \u2014 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u044f \u0445\u043e\u0447\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432?<\/h3>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u043c\u0438\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0430 \u043d\u0430\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043d\u0443\u0436\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u043e\u0438\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"javascript\">getUserByName('nolan').then(function (user) {     return getUserAccountById(user.id);   })   .then(function (userAccount) {     \/\/ \u0421\u0442\u043e\u0439\u0442\u0435, \u043c\u043d\u0435 \u0435\u0449\u0435 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u00abuser\u00bb \u043d\u0443\u0436\u0435\u043d!   }); <\/code><\/pre>\n<p>  \u0416\u0435\u043b\u0430\u044f \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 JavaScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u043c\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <b>user<\/b>, \u0434\u0430\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0443 \u0437\u043b\u0430\u00bb.<\/p>\n<pre><code class=\"javascript\">var user; getUserByName('nolan').then(function (result) {     user = result;     return getUserAccountById(user.id);   })   .then(function (userAccount) {     \/\/ \u0425\u043e\u0440\u043e\u0448\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0438 \u00abuser\u00bb, \u0438 \u00abuserAccount\u00bb   }); <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043a\u043e\u0434 \u00ab\u043f\u043e\u043f\u0430\u0445\u0438\u0432\u0430\u0435\u0442\u00bb. \u041c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0440\u0435\u0434\u0443\u0431\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0433 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u00ab\u043f\u0438\u0440\u0430\u043c\u0438\u0434\u044b\u00bb:<\/p>\n<pre><code class=\"javascript\">getUserByName('nolan').then(function (user) {     return getUserAccountById(user.id)       .then(function (userAccount) {         \/\/ \u0425\u043e\u0440\u043e\u0448\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0438 \u00abuser\u00bb, \u0438 \u00abuserAccount\u00bb       }); }); <\/code><\/pre>\n<p>  \u2026 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0448\u0430\u0433. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u043f\u043e\u0447\u0443\u0441\u0442\u0432\u0443\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0443\u0433\u0440\u043e\u0436\u0430\u044e\u0449\u0435 \u0440\u0430\u0441\u0442\u0438, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e JavaScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043a\u043e\u043d \u0432\u0435\u043a\u043e\u0432 \u2014 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438.<\/p>\n<pre><code class=\"javascript\">function onGetUserAndUserAccount(user, userAccount) {   return doSomething(user, userAccount); }  function onGetUser(user) {   return getUserAccountById(user.id)     .then(function (userAccount) {       return onGetUserAndUserAccount(user, userAccount);     }); }  getUserByName('nolan')   .then(onGetUser)   .then(function () {     \/\/ \u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f doSomething() \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c,     \/\/ \u0430 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043d\u0435 \u0432\u044b\u0440\u043e\u0441\u043b\u0438 \u2014 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u043e\u0439 \u0438 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442   }); <\/code><\/pre>\n<p>  \u041f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c\u0441\u044f, \u0432\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043c\u0435\u043d\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0441\u0430\u043c\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0438\u0434, \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0449\u0438\u0439 \u044d\u0441\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435:<\/p>\n<pre><code class=\"javascript\">putYourRightFootIn()   .then(putYourRightFootOut)   .then(putYourRightFootIn)   .then(shakeItAllAbout); <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u043e\u043c\u0438\u0441\u044b.<\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u21165 \u2014 \u00ab\u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u0435\u00bb \u0441\u043a\u0432\u043e\u0437\u044c \u043f\u0440\u043e\u043c\u0438\u0441\u044b<\/h3>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u044f \u043d\u0430\u043c\u0435\u043a\u0430\u043b, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0432\u0430\u043c \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u043a\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u041f\u043e\u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0432 \u0435\u0433\u043e, \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u043b\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434?<\/p>\n<pre><code class=\"javascript\">Promise.resolve('foo')   .then(Promise.resolve('bar'))   .then(function (result) {     console.log(result);   }); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 bar, \u0432\u044b \u043e\u0448\u0438\u0431\u043b\u0438\u0441\u044c. \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f foo!<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u0432 <b>then()<\/b> \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u043c\u0438\u0441), \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a <b>then(null)<\/b> \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043f\u0440\u043e\u043c\u0438\u0441 \u00ab\u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0430\u043c\u0438:<\/p>\n<pre><code class=\"javascript\">Promise.resolve('foo')   .then(null)   .then(function (result) {     console.log(result);   }); <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e <b>then(null)<\/b>, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c \u2014 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 foo.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0441 \u043a \u0432\u044b\u0431\u043e\u0440\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438 \u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432. \u041c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438 \u0435\u0433\u043e \u0432\u044b\u0448\u0435. \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 <b>then()<\/b> \u043f\u0440\u043e\u043c\u0438\u0441, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u044b \u043e\u0436\u0438\u0434\u0430\u043b\u0438. \u041c\u0435\u0442\u043e\u0434 <b>then()<\/b> \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0427\u0442\u043e\u0431\u044b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0431\u044b\u043b\u0438\u0441\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">Promise.resolve('foo')   .then(function () {     return Promise.resolve('bar');   })   .then(function (result) {     console.log(result);   }); <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 bar, \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u0438.<\/p>\n<p>  \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c: \u0432 \u043c\u0435\u0442\u043e\u0434 <b>then()<\/b> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445 \u0437\u043d\u0430\u0435\u043c \u0432\u0441\u0435 \u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0431\u043b\u0438\u0437\u043a\u0438 \u043a \u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0432\u044b\u0448\u0435.<\/p>\n<p>  \u0412\u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u0441\u0435 \u043f\u0430\u0437\u043b\u044b \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<h4>\u041f\u0430\u0437\u043b \u21161<\/h4>\n<p>  <\/p>\n<pre><code class=\"javascript\">doSomething().then(function () {     return doSomethingElse();   })   .then(finalHandler); <\/code><\/pre>\n<p>  \u041e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>doSomething |-----------------|                   doSomethingElse(undefined)                   |------------------|                                      finalHandler(resultOfDoSomethingElse)                                      |------------------| <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041f\u0430\u0437\u043b \u21162<\/h4>\n<p>  <\/p>\n<pre><code class=\"javascript\">doSomething().then(function () {     doSomethingElse();   })   .then(finalHandler); <\/code><\/pre>\n<p>  \u041e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>doSomething |-----------------|                   doSomethingElse(undefined)                   |------------------|                   finalHandler(undefined)                   |------------------| <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041f\u0430\u0437\u043b \u21163<\/h4>\n<p>  <\/p>\n<pre><code class=\"javascript\">doSomething().then(doSomethingElse())   .then(finalHandler); <\/code><\/pre>\n<p>  \u041e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>doSomething |-----------------| doSomethingElse(undefined) |---------------------------------|                   finalHandler(resultOfDoSomething)                   |------------------| <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041f\u0430\u0437\u043b \u21164<\/h4>\n<p>  <\/p>\n<pre><code class=\"javascript\">doSomething().then(doSomethingElse)   .then(finalHandler); <\/code><\/pre>\n<p>  \u041e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code>doSomething |-----------------|                   doSomethingElse(resultOfDoSomething)                   |------------------|                                      finalHandler(resultOfDoSomethingElse)                                      |------------------| <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0435\u0449\u0435 \u0440\u0430\u0437, \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>doSomething()<\/b> \u0438 <b>doSomethingElse()<\/b>, \u0438 \u043f\u043e\u043f\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0441 \u043a\u0430\u043a\u0438\u043c\u0438-\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u043e\u0439 <a href=\"https:\/\/gist.github.com\/nolanlawson\/6ce81186421d2fa109a4\">\u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u043a<\/a>.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u0445<\/h2>\n<p>  \u041f\u0440\u043e\u043c\u0438\u0441\u044b \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0438, \u044f \u043d\u0430\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u044b. \u0412\u0430\u0448 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0435\u0435, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u043d\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435, \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043f\u0440\u0443\u0444-\u043b\u0438\u043d\u043a \u2014 <a href=\"https:\/\/github.com\/pouchdb\/mapreduce\/commit\/dfe44b0ab3da9d213640a1010b34bb27327da4c9\">\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 PounchDB \u043c\u043e\u0434\u0443\u043b\u044f map\/reduce \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u044b<\/a>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 290 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, 555 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445. \u041f\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u0435\u0436\u043d\u0438\u0445 \u0436\u0443\u0442\u043a\u0438\u0445 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u0431\u044b\u043b\u2026 \u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0438\u0437 \u043e\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432.<\/p>\n<p>  \u042f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u044b. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u0447\u0442\u043e \u043e\u043d\u0438 \u043b\u0443\u0447\u0448\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043f\u0438\u043d\u043a\u043e\u043c \u0432 \u0436\u0438\u0432\u043e\u0442 \u0438 \u0443\u0434\u0430\u0440\u043e\u043c \u0432 \u0437\u0443\u0431\u044b. \u0414\u0430, \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041f\u0440\u043e\u043c\u0438\u0441\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u0442\u0440\u0443\u0434\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e. \u0414\u0430\u0436\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u043a\u043e\u0432\u0430\u0440\u043d\u0443\u044e \u043b\u043e\u0432\u0443\u0448\u043a\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u043c\u0438\u0441\u044b, \u0445\u043e\u0442\u044c \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u0441\u0445\u043e\u0436\u0438\u0435 \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043d\u0430 \u0434\u0435\u043b\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0432\u043d\u044b \u0438\u043c.<\/p>\n<h2>\u0416\u0434\u0435\u043c async\/await<\/h2>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u00ab<a href=\"http:\/\/pouchdb.com\/2015\/03\/05\/taming-the-async-beast-with-es7.html\">\u0423\u043a\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0430 \u0441 ES7<\/a>\u00bb \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b <b>async\/await<\/b> \u0438 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0433\u043b\u0443\u0431\u0436\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0432 \u044f\u0437\u044b\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u0441 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <b>catch()<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0430\u043a \u0438\u0437 <b>try\/catch<\/b>, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c, ES7 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 <b>try\/catch\/return<\/b>.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0431\u043b\u0430\u0433\u043e \u0434\u043b\u044f JavaScript, \u043a\u0430\u043a \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043d\u0442\u0438-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0430\u0448\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043d\u0430\u043c \u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 JavaScript, \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e <a href=\"http:\/\/jslint.com\">JSLint<\/a> \u0438 <a href=\"http:\/\/jshint.com\">JSHint<\/a> \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u00ab<a href=\"http:\/\/www.amazon.com\/dp\/0596517742\/ref=cm_sw_su_dp\">\u0425\u043e\u0440\u043e\u0448\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b JavaScript<\/a>\u00bb, \u0445\u043e\u0442\u044c \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u0443\u0442\u044c \u0443 \u043d\u0438\u0445 \u043f\u043e\u0445\u043e\u0436\u0430. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u043d\u0438\u0433\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438.<\/p>\n<p>  \u041a\u0440\u0430\u0441\u043e\u0442\u0430 <b>async\/await<\/b> \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0430\u0448\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u044f\u0432\u044f\u0442 \u0441\u0435\u0431\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0435 JS, \u0430 \u043d\u0435 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u0414\u043e \u0442\u0435\u0445 \u0436\u0435 \u043f\u043e\u0440 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432, \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 ES5 \u0438 ES6.<\/p>\n<p>  \u041a\u0430\u043a \u0438 \u043a\u043d\u0438\u0433\u0430 \u00ab\u0425\u043e\u0440\u043e\u0448\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b JavaScript\u00bb, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043b\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u0441\u0432\u043e\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0435\u0433\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0439\u0434\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0438\u043b\u044b \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c:<\/p>\n<p>  \u2014 \u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438!       <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/269465\/\"> http:\/\/habrahabr.ru\/post\/269465\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <i>\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u041d\u043e\u043b\u0430\u043d\u0430 \u041b\u043e\u0443\u0441\u043e\u043d\u0430 \u00ab<a href=\"http:\/\/pouchdb.com\/2015\/05\/18\/we-have-a-problem-with-promises.html\">\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438<\/a>\u00bb, \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u043e \u0442\u0435\u043c\u0435 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u043c\u043d\u0435 \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c.<\/i><\/p>\n<h3>\u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438<\/h3>\n<p>  \u0414\u043e\u0440\u043e\u0433\u0438\u0435 JavaScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043d\u0430\u0441\u0442\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c \u044d\u0442\u043e \u2014 \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0435\u0442, \u043d\u0435 \u0441 \u0441\u0430\u043c\u0438\u043c\u0438 \u043f\u0440\u043e\u043c\u0438\u0441\u0430\u043c\u0438. \u0418\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e <a href=\"https:\/\/promisesaplus.com\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 A+<\/a> \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0430\u043c\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0437\u0430 \u0433\u043e\u0434\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0431\u043e\u0440\u044e\u0442\u0441\u044f \u0441 \u0431\u043e\u0433\u0430\u0442\u044b\u043c\u0438 \u043d\u0430 \u043f\u0440\u043e\u043c\u0438\u0441\u044b API, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:<\/p>\n<p>  \u2014 \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043d\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u043c\u0438\u0441\u044b \u0431\u0435\u0437 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0445 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u043d\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435, \u0440\u0435\u0448\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443:<\/p>\n<p>  <b>\u0412\u043e\u043f\u0440\u043e\u0441: \u0412 \u0447\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432?<\/b><\/p>\n<pre><code class=\"javascript\">doSomething().then(function () {   return doSomethingElse(); });  doSomething().then(function () {   doSomethingElse(); });  doSomething().then(doSomethingElse());  doSomething().then(doSomethingElse); <\/code><\/pre>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-266748","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/266748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=266748"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/266748\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=266748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=266748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=266748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}