[{"data":1,"prerenderedAt":348},["ShallowReactive",2],{"smEFKlYBK0":3},[4],{"id":5,"date":6,"date_gmt":7,"guid":8,"modified":10,"modified_gmt":11,"slug":12,"status":13,"type":14,"link":15,"title":16,"content":18,"excerpt":21,"author":23,"featured_media":24,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":28,"categories":29,"tags":31,"class_list":32,"acf":40,"yoast_head":41,"yoast_head_json":42,"featured_media_src_url":137,"_links":138,"_embedded":186},455,"2024-06-16T13:12:00","2024-06-16T10:12:00",{"rendered":9},"https://api.aoskin.ru/?p=455","2024-10-19T10:09:02","2024-10-19T07:09:02","asinhronnyj-javascript-promise-async-await-fetch","publish","post","https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/",{"rendered":17},"Асинхронный JavaScript: Promise, async/await, fetch",{"rendered":19,"protected":20},"\n\u003Cp>С появлением объекта \u003Ccode>Promise\u003C/code> в javascript разработчики веб-браузеров активно внедряют API &#8211; интерфейсы, основанные на промисах. Многие новые веб-интерфейсы и функции браузеров используют промисы для обработки асинхронных операций, таких как загрузка или получение данных, анимации и многие другие.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Три возможных состояния Promise:\u003C/h2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ccode>Pending\u003C/code>(ожидание): начальное состояние, операция не завершена.\u003C/li>\n\n\n\n\u003Cli>\u003Ccode>Fulfilled\u003C/code>(выполнен)\u003Ccode>:\u003C/code> операция завершена успешно.\u003C/li>\n\n\n\n\u003Cli>\u003Ccode>Rejected\u003C/code>(отклонён)\u003Ccode>:\u003C/code> операция завершена с ошибкой.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Объект Promise в виде цепочки\u003C/h2>\n\n\n\n\u003Cp>Одним из наиболее важных преимуществ объекта \u003Ccode>Promise\u003C/code> является, то, что мы можем писать асинхронные операции в виде линейной цепочки вызовов метода \u003Ccode>then()\u003C/code> без вложения каждой новой операции внутрь обратного вызова предыдущей операции.\u003C/p>\n\n\n\n\u003Cp>Пример реализации функции возвращающая \u003Ccode>Promise\u003C/code>, для обработки результата \u003Ccode>Promise\u003C/code> используются методы \u003Ccode>.then\u003C/code> и \u003Ccode>.catch\u003C/code>\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>function getData() {\n  return new Promise((resolve, reject) =&gt; {\n    setTimeout(() =&gt; {\n      const success = true;\n      if (success) {\n        resolve({message: &#39;resolve&#39;});\n      } else {\n        reject(&quot;reject!&quot;);\n      }\n    }, 2000); \n  });\n}\n\n// .then / .catch\ngetData()\n  .then(result =&gt; {\n    console.log(&quot;Result:&quot;, result); // Resolve promise\n  })\n  .catch(error =&gt; {\n    console.error(&quot;Error:&quot;, error); // Catch error\n  });\n\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Современные возможности ES2017: \u003Ccode>async/await\u003C/code>\u003C/h2>\n\n\n\n\u003Cp>Применение \u003Ccode>Promise\u003C/code> позволяет писать асинхронный код, который выглядит как синхронный и не блокирует при ожидании ответов сети и других асинхронных событий. \u003Ccode>Await\u003C/code> берет объект \u003Ccode>Promise\u003C/code> и преобразует его в возвращаемое значение либо в сгенерированное исключение.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>let response = await fetch(&#39;https://api.example.com/user/position&#39;);\nlet position = await response.json();\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Любой код в котором применяет \u003Ccode>await\u003C/code> становится асинхронным в связи с этим необходимо учитывать важное правило: \u003Ccode>await\u003C/code> можно применять только в функциях которые были объявлены с ключевым словом \u003Ccode>async\u003C/code>. С помощью \u003Ccode>await\u003C/code> можно легко выполнять последовательные асинхронные операции:\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode> async function fetchData() {\n  const firstResponse = await fetch(&#39;https://api.example.com/data1&#39;);\n  const data1 = await firstResponse.json();\n\n  const secondResponse = await fetch(`https://api.example.com/data2?param=${data1.param}`);\n  const data2 = await secondResponse.json();\n\n  console.log(data2);\n}\n\nfetchData();\n\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">\u003Ccode>Fetch\u003C/code>\u003C/h2>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>fetch(&#39;https://api.github.com/users&#39;)\n  .then(response =&gt; response.json())\n  .then(users =&gt; {\n    console.log(users);\n  })\n  .catch(error =&gt; {\n    console.error(`Error: ${error}`);\n  });\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Статические методы Promise\u003C/h2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Promise.resolve() и Promise.reject()\u003C/h3>\n\n\n\n\u003Cp>Иногда может понадобиться реализовать существующий API-интерфейс на основе \u003Ccode>Promise\u003C/code> и возвращать \u003Ccode>Promise\u003C/code> даже если при вычислении не требуется никаких асинхронных операций. Для этого можно использовать методы \u003Ccode>Promise.resolve()\u003C/code> и \u003Ccode>Promise.reject()\u003C/code>.\u003C/p>\n\n\n\n\u003Cp>\u003Ccode>Promise.resolve()\u003C/code> &#8211; принимает значение единственного аргумента и возвращает объект Promise с выполненным (но асинхронно) результатом.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>Promise.resolve(&#39;Javascript&#39;).then(result =&gt; console.log(result)); // Javascript\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>\u003Ccode>Promise.reject()\u003C/code> &#8211; принимает значение единственного аргумента и возвращает объект Promise с отклоненным (но асинхронно) результатом.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>Promise.reject(new Error(&#39;Error!&#39;))\n  .catch(error =&gt; console.error(error.message)); // Error in console\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Promise.all() и Promise.allSettled()\u003C/h3>\n\n\n\n\u003Cp>\u003Ccode>Promise.all()\u003C/code> &#8211; принимает на входе массив объектов Promise и возвращает объект Promise. Объект Promise будет удовлетворен с массивом значений, которыми удовлетворены все входные объекты Promise, если отклонен любой из входных объектов \u003Ccode>Promise\u003C/code>, то объект \u003Ccode>Promise\u003C/code> будет отклонен с результатом ошибки входного объекта.\u003C/p>\n\n\n\n\u003Cp>Пример успешного выполнения всех промисов:\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>Promise.all([\n  new Promise(resolve =&gt; resolve(&#39;HTML&#39;)),\n  new Promise(resolve =&gt; resolve(&#39;CSS&#39;)),\n  new Promise(resolve =&gt; resolve(&#39;Javascript&#39;))\n]).then(result =&gt; console.log(result)); // HTML, CSS, Javascript\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Пример выполнения промиса, когда возникает ошибка:\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>Promise.all([\n  new Promise(resolve =&gt; resolve(&#39;HTML&#39;)),\n  new Promise((resolve, reject) =&gt; reject(new Error(&quot;Error!&quot;))),\n  new Promise(resolve =&gt; resolve(&#39;Javascript&#39;))\n])\n.then(result =&gt; console.log(result))\n.catch(error =&gt; console.error(error));\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Promise.allSettled: позволяет дождаться завершения всех переданных Promise, независимо от того, завершились они успешно или с ошибкой. Возвращает массив с результатами каждого Promise.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>const promises = [\n  Promise.resolve(&#39;Resolve&#39;),\n  Promise.reject(&#39;Error&#39;),\n  Promise.resolve(&#39;Resolve&#39;)\n];\n\nPromise.allSettled(promises)\n  .then(results =&gt; console.log(results));\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Promise.race() и Promise.any()\u003C/h3>\n\n\n\n\u003Cp>\u003Ccode>Promise.race\u003C/code>() &#8211; принимает массив промисов и возвращает новый промис, который разрешается или отклоняется при первом завершении любого, который выполнится быстрее остальных промисов из массива.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>Promise.race([\n  new Promise(resolve =&gt; setTimeout(resolve, 100, &#39;one&#39;)),\n  new Promise(resolve =&gt; setTimeout(resolve, 200, &#39;two&#39;)),\n])\n  .then(result =&gt; {\n    console.log(result); // one\n  });\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Promise.any: возвращает первый успешно завершившийся \u003Ccode>Promise\u003C/code>. Если все переданные \u003Ccode>Promise\u003C/code> отклонены, возвращает ошибку.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>const promises = [\n  Promise.reject(&#39;Error 1&#39;),\n  Promise.resolve(&#39;Resolve&#39;),\n  Promise.reject(&#39;Error 2&#39;)\n];\n\nPromise.any(promises)\n  .then(result =&gt; console.log(result)) // Resolve\n  .catch(error =&gt; console.error(error)); // AggregateError\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Заключение\u003C/h2>\n\n\n\n\u003Cp>Объекты Promise позволяют по новому структурировать функции обратных вызовов. При корректном применение они способны преобразовывать вложенный асинхронный код, в линейные цепочки вызовов \u003Ccode>then()\u003C/code>, где один асинхронный шаг результата следует за другим. Еще одним преимуществом объекта Promise является возможность централизовать код обработки ошибок внутри единственного вызова в конце цепочки вызовов \u003Ccode>then()\u003C/code>.\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>\u003Ccode>Promise.all(promises)\u003C/code>\u003C/strong> &#8211; удобен, когда необходимо дождаться выполнения всех промисов и использовать их результаты, предполагая, что ни один из них не отклонен.\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>Promise.allSettled(promises)\u003C/code>\u003C/strong> &#8211; полезен, когда необходимо выполнить все промисы и получить информацию о том, как каждый из них завершился, даже если некоторые из них были отклонены.\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>Promise.race(promises)\u003C/code>\u003C/strong> &#8211; полезен, когда нужно выполнить какое-то действие по достижении первого выполненного промиса из массива, остальные игнорируются.\u003C/li>\n\n\n\n\u003Cli>\u003Ccode>\u003Cstrong>Promise.any(promises)\u003C/strong>\u003C/code> &#8211; полезен, когда нужно выполнить действие при получении первого успешно выполненного промиса, если все промисы отклонены \u003Ca href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\" target=\"_blank\" rel=\"noreferrer noopener\">\u003Ccode>AggregateError\u003C/code>\u003C/a>&nbsp;становится ошибкой&nbsp;\u003Ccode>Promise.any\u003C/code>.\u003C/li>\n\n\n\n\u003Cli>\u003Ccode>\u003Cstrong>Promise.resolve\u003Ccode>(value)\u003C/code>\u003C/strong>\u003C/code> &#8211; полезен, когда нужно создать промис и разрешить его с определенным значением.\u003C/li>\n\n\n\n\u003Cli>\u003Ccode>\u003Cstrong>Promise.reject\u003Ccode>(error)\u003C/code>\u003C/strong>\u003C/code> &#8211; удобен, когда необходимо вернуть промис с ошибкой \u003Ccode>error\u003C/code>.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Подробная информация о промисах\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ca href=\"https://learn.javascript.ru/promise-basics\" target=\"_blank\" rel=\"noreferrer noopener\">Промисы\u003C/a>\u003C/li>\n\n\n\n\u003Cli>\u003Ca href=\"https://learn.javascript.ru/promise-api\" target=\"_blank\" rel=\"noreferrer noopener\">Promise API\u003C/a>\u003C/li>\n\n\n\n\u003Cli>\u003Ca href=\"https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise\" target=\"_blank\" rel=\"noreferrer noopener\">Promise\u003C/a>\u003C/li>\n\u003C/ul>\n",false,{"rendered":22,"protected":20},"\u003Cp>В мире JavaScript, асинхронное программирование стало неотъемлемой частью разработки. Одним из ключевых инструментов для работы с асинхронным кодом являются Promise.\u003C/p>\n",1,724,"open","","standard",{"_acf_changed":20,"footnotes":26},[30],17,[],[33,14,34,35,36,37,38,39],"post-455","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript",[],"\u003C!-- This site is optimized with the Yoast SEO plugin v26.6 - https://yoast.com/wordpress/plugins/seo/ -->\n\u003Ctitle>Асинхронный JavaScript: Promise, async/await, fetch\u003C/title>\n\u003Cmeta name=\"description\" content=\"- Асинхронный javascript: Promise, async/await, fetch. В мире JavaScript, асинхронное программирование стало неотъемлемой частью разработки.\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"article\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"Асинхронный JavaScript: Promise, async/await, fetch\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:description\" content=\"- Асинхронный javascript: Promise, async/await, fetch. В мире JavaScript, асинхронное программирование стало неотъемлемой частью разработки.\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"article:published_time\" content=\"2024-06-16T10:12:00+00:00\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"article:modified_time\" content=\"2024-10-19T07:09:02+00:00\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:image\" content=\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:width\" content=\"1456\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:height\" content=\"816\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:type\" content=\"image/webp\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"author\" content=\"aoskin\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:label1\" content=\"Written by\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:data1\" content=\"aoskin\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:label2\" content=\"Est. reading time\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:data2\" content=\"3 minutes\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#article\",\"isPartOf\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\"},\"author\":{\"name\":\"aoskin\",\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"headline\":\"Асинхронный JavaScript: Promise, async/await, fetch\",\"datePublished\":\"2024-06-16T10:12:00+00:00\",\"dateModified\":\"2024-10-19T07:09:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\"},\"wordCount\":512,\"commentCount\":0,\"publisher\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"image\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#primaryimage\"},\"thumbnailUrl\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"articleSection\":[\"JavaScript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\",\"url\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\",\"name\":\"Асинхронный JavaScript: Promise, async/await, fetch\",\"isPartOf\":{\"@id\":\"https://api.aoskin.ru/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#primaryimage\"},\"image\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#primaryimage\"},\"thumbnailUrl\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"datePublished\":\"2024-06-16T10:12:00+00:00\",\"dateModified\":\"2024-10-19T07:09:02+00:00\",\"description\":\"- Асинхронный javascript: Promise, async/await, fetch. В мире JavaScript, асинхронное программирование стало неотъемлемой частью разработки.\",\"breadcrumb\":{\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#primaryimage\",\"url\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"contentUrl\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"width\":1456,\"height\":816},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://api.aoskin.ru/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Асинхронный JavaScript: Promise, async/await, fetch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://api.aoskin.ru/#website\",\"url\":\"https://api.aoskin.ru/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://api.aoskin.ru/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\",\"url\":\"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"contentUrl\":\"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\"},\"sameAs\":[\"http://api.aoskin.ru\"],\"url\":\"https://api.aoskin.ru/author/aoskin/\"}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":17,"description":43,"robots":44,"canonical":15,"og_locale":50,"og_type":51,"og_title":17,"og_description":43,"og_url":15,"og_site_name":52,"article_published_time":53,"article_modified_time":54,"og_image":55,"author":61,"twitter_card":62,"twitter_misc":63,"schema":65},"- Асинхронный javascript: Promise, async/await, fetch. В мире JavaScript, асинхронное программирование стало неотъемлемой частью разработки.",{"index":45,"follow":46,"max-snippet":47,"max-image-preview":48,"max-video-preview":49},"index","follow","max-snippet:-1","max-image-preview:large","max-video-preview:-1","en_US","article","api.aoskin.ru","2024-06-16T10:12:00+00:00","2024-10-19T07:09:02+00:00",[56],{"width":57,"height":58,"url":59,"type":60},1456,816,"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp","image/webp","aoskin","summary_large_image",{"Written by":61,"Est. reading time":64},"3 minutes",{"@context":66,"@graph":67},"https://schema.org",[68,89,101,103,112,126],{"@type":69,"@id":70,"isPartOf":71,"author":72,"headline":17,"datePublished":53,"dateModified":54,"mainEntityOfPage":74,"wordCount":75,"commentCount":76,"publisher":77,"image":78,"thumbnailUrl":59,"articleSection":80,"inLanguage":82,"potentialAction":83},"Article","https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#article",{"@id":15},{"name":61,"@id":73},"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861",{"@id":15},512,0,{"@id":73},{"@id":79},"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#primaryimage",[81],"JavaScript","en-US",[84],{"@type":85,"name":86,"target":87},"CommentAction","Comment",[88],"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#respond",{"@type":90,"@id":15,"url":15,"name":17,"isPartOf":91,"primaryImageOfPage":93,"image":94,"thumbnailUrl":59,"datePublished":53,"dateModified":54,"description":43,"breadcrumb":95,"inLanguage":82,"potentialAction":97},"WebPage",{"@id":92},"https://api.aoskin.ru/#website",{"@id":79},{"@id":79},{"@id":96},"https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/#breadcrumb",[98],{"@type":99,"target":100},"ReadAction",[15],{"@type":102,"inLanguage":82,"@id":79,"url":59,"contentUrl":59,"width":57,"height":58},"ImageObject",{"@type":104,"@id":96,"itemListElement":105},"BreadcrumbList",[106,110],{"@type":107,"position":23,"name":108,"item":109},"ListItem","Home","https://api.aoskin.ru/",{"@type":107,"position":111,"name":17},2,{"@type":113,"@id":92,"url":109,"name":114,"description":26,"publisher":115,"alternateName":114,"potentialAction":116,"inLanguage":82},"WebSite","aoskin.ru",{"@id":73},[117],{"@type":118,"target":119,"query-input":122},"SearchAction",{"@type":120,"urlTemplate":121},"EntryPoint","https://api.aoskin.ru/?s={search_term_string}",{"@type":123,"valueRequired":124,"valueName":125},"PropertyValueSpecification",true,"search_term_string",{"@type":127,"@id":73,"name":61,"image":130,"logo":133,"sameAs":134,"url":136},[128,129],"Person","Organization",{"@type":102,"inLanguage":82,"@id":131,"url":132,"contentUrl":132,"caption":61},"https://api.aoskin.ru/#/schema/person/image/","https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g",{"@id":131},[135],"http://api.aoskin.ru","https://api.aoskin.ru/author/aoskin/","https://api.aoskin.ru/wp-content/uploads/2024/06/12-1024x574.webp",{"self":139,"collection":149,"about":152,"author":155,"replies":158,"version-history":161,"predecessor-version":165,"wp:featuredmedia":169,"wp:attachment":172,"wp:term":175,"curies":182},[140],{"href":141,"targetHints":142},"https://api.aoskin.ru/wp-json/wp/v2/posts/455",{"allow":143},[144,145,146,147,148],"GET","POST","PUT","PATCH","DELETE",[150],{"href":151},"https://api.aoskin.ru/wp-json/wp/v2/posts",[153],{"href":154},"https://api.aoskin.ru/wp-json/wp/v2/types/post",[156],{"embeddable":124,"href":157},"https://api.aoskin.ru/wp-json/wp/v2/users/1",[159],{"embeddable":124,"href":160},"https://api.aoskin.ru/wp-json/wp/v2/comments?post=455",[162],{"count":163,"href":164},66,"https://api.aoskin.ru/wp-json/wp/v2/posts/455/revisions",[166],{"id":167,"href":168},1162,"https://api.aoskin.ru/wp-json/wp/v2/posts/455/revisions/1162",[170],{"embeddable":124,"href":171},"https://api.aoskin.ru/wp-json/wp/v2/media/724",[173],{"href":174},"https://api.aoskin.ru/wp-json/wp/v2/media?parent=455",[176,179],{"taxonomy":177,"embeddable":124,"href":178},"category","https://api.aoskin.ru/wp-json/wp/v2/categories?post=455",{"taxonomy":180,"embeddable":124,"href":181},"post_tag","https://api.aoskin.ru/wp-json/wp/v2/tags?post=455",[183],{"name":184,"href":185,"templated":124},"wp","https://api.w.org/{rel}",{"author":187,"wp:featuredmedia":236,"wp:term":298},[188],{"id":23,"name":61,"url":135,"description":26,"link":136,"slug":61,"avatar_urls":189,"yoast_head":192,"yoast_head_json":193,"acf":227,"_links":228},{"24":190,"48":191,"96":132},"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=24&d=mm&r=g","https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=48&d=mm&r=g","\u003C!-- This site is optimized with the Yoast SEO plugin v26.6 - https://yoast.com/wordpress/plugins/seo/ -->\n\u003Ctitle>aoskin, Author at api.aoskin.ru\u003C/title>\n\u003C!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [Yoast SEO - Settings] menu and set up a template. -->\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/author/aoskin/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"profile\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"aoskin, Author at api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/author/aoskin/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:image\" content=\"https://secure.gravatar.com/avatar/2facb94fc7068b47efc88c943d1949fc?s=500&d=mm&r=g\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"ProfilePage\",\"@id\":\"https://api.aoskin.ru/author/aoskin/\",\"url\":\"https://api.aoskin.ru/author/aoskin/\",\"name\":\"aoskin, Author at api.aoskin.ru\",\"isPartOf\":{\"@id\":\"https://api.aoskin.ru/#website\"},\"breadcrumb\":{\"@id\":\"https://api.aoskin.ru/author/aoskin/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https://api.aoskin.ru/author/aoskin/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://api.aoskin.ru/author/aoskin/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://api.aoskin.ru/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Archives for aoskin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://api.aoskin.ru/#website\",\"url\":\"https://api.aoskin.ru/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://api.aoskin.ru/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\",\"url\":\"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"contentUrl\":\"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\"},\"sameAs\":[\"http://api.aoskin.ru\"],\"mainEntityOfPage\":{\"@id\":\"https://api.aoskin.ru/author/aoskin/\"}}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":194,"robots":195,"canonical":136,"og_locale":50,"og_type":196,"og_title":194,"og_url":136,"og_site_name":52,"og_image":197,"twitter_card":62,"schema":200},"aoskin, Author at api.aoskin.ru",{"index":45,"follow":46,"max-snippet":47,"max-image-preview":48,"max-video-preview":49},"profile",[198],{"url":199,"type":26,"width":26,"height":26},"https://secure.gravatar.com/avatar/2facb94fc7068b47efc88c943d1949fc?s=500&d=mm&r=g",{"@context":66,"@graph":201},[202,210,215,221],{"@type":203,"@id":136,"url":136,"name":194,"isPartOf":204,"breadcrumb":205,"inLanguage":82,"potentialAction":207},"ProfilePage",{"@id":92},{"@id":206},"https://api.aoskin.ru/author/aoskin/#breadcrumb",[208],{"@type":99,"target":209},[136],{"@type":104,"@id":206,"itemListElement":211},[212,213],{"@type":107,"position":23,"name":108,"item":109},{"@type":107,"position":111,"name":214},"Archives for aoskin",{"@type":113,"@id":92,"url":109,"name":114,"description":26,"publisher":216,"alternateName":114,"potentialAction":217,"inLanguage":82},{"@id":73},[218],{"@type":118,"target":219,"query-input":220},{"@type":120,"urlTemplate":121},{"@type":123,"valueRequired":124,"valueName":125},{"@type":222,"@id":73,"name":61,"image":223,"logo":224,"sameAs":225,"mainEntityOfPage":226},[128,129],{"@type":102,"inLanguage":82,"@id":131,"url":132,"contentUrl":132,"caption":61},{"@id":131},[135],{"@id":136},[],{"self":229,"collection":233},[230],{"href":157,"targetHints":231},{"allow":232},[144,145,146,147,148],[234],{"href":235},"https://api.aoskin.ru/wp-json/wp/v2/users",[237],{"id":24,"date":238,"slug":239,"type":240,"link":241,"title":242,"author":23,"featured_media":76,"acf":244,"caption":245,"alt_text":26,"media_type":246,"mime_type":60,"media_details":247,"source_url":59,"_links":278},"2024-08-03T16:36:43","12-2","attachment","https://api.aoskin.ru/asinhronnyj-javascript-promise-async-await-fetch/12-2/",{"rendered":243},"12",[],{"rendered":26},"image",{"width":57,"height":58,"file":248,"filesize":249,"sizes":250,"image_meta":275},"2024/06/12.webp",1554368,{"medium":251,"large":257,"thumbnail":262,"medium_large":267,"full":273},{"file":252,"width":253,"height":254,"filesize":255,"mime_type":60,"source_url":256},"12-300x168.webp",300,168,11508,"https://api.aoskin.ru/wp-content/uploads/2024/06/12-300x168.webp",{"file":258,"width":259,"height":260,"filesize":261,"mime_type":60,"source_url":137},"12-1024x574.webp",1024,574,66742,{"file":263,"width":264,"height":264,"filesize":265,"mime_type":60,"source_url":266},"12-150x150.webp",150,5720,"https://api.aoskin.ru/wp-content/uploads/2024/06/12-150x150.webp",{"file":268,"width":269,"height":270,"filesize":271,"mime_type":60,"source_url":272},"12-768x430.webp",768,430,45674,"https://api.aoskin.ru/wp-content/uploads/2024/06/12-768x430.webp",{"file":274,"width":57,"height":58,"mime_type":60,"source_url":59},"12.webp",{"aperture":276,"credit":26,"camera":26,"caption":26,"created_timestamp":276,"copyright":26,"focal_length":276,"iso":276,"shutter_speed":276,"title":26,"orientation":276,"keywords":277},"0",[],{"self":279,"collection":283,"about":286,"author":289,"replies":291,"wp:attached-to":294,"curies":296},[280],{"href":171,"targetHints":281},{"allow":282},[144,145,146,147,148],[284],{"href":285},"https://api.aoskin.ru/wp-json/wp/v2/media",[287],{"href":288},"https://api.aoskin.ru/wp-json/wp/v2/types/attachment",[290],{"embeddable":124,"href":157},[292],{"embeddable":124,"href":293},"https://api.aoskin.ru/wp-json/wp/v2/comments?post=724",[295],{"embeddable":124,"post_type":14,"id":5,"href":141},[297],{"name":184,"href":185,"templated":124},[299,347],[300],{"id":30,"link":301,"name":81,"slug":302,"taxonomy":177,"yoast_head":303,"yoast_head_json":304,"acf":329,"_links":330},"https://api.aoskin.ru/category/javascript/","javascript","\u003C!-- This site is optimized with the Yoast SEO plugin v26.6 - https://yoast.com/wordpress/plugins/seo/ -->\n\u003Ctitle>JavaScript Archives - api.aoskin.ru\u003C/title>\n\u003C!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [Yoast SEO - Settings] menu and set up a template. -->\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/category/javascript/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"article\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"JavaScript Archives - api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/category/javascript/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"CollectionPage\",\"@id\":\"https://api.aoskin.ru/category/javascript/\",\"url\":\"https://api.aoskin.ru/category/javascript/\",\"name\":\"JavaScript Archives - api.aoskin.ru\",\"isPartOf\":{\"@id\":\"https://api.aoskin.ru/#website\"},\"breadcrumb\":{\"@id\":\"https://api.aoskin.ru/category/javascript/#breadcrumb\"},\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://api.aoskin.ru/category/javascript/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://api.aoskin.ru/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https://api.aoskin.ru/#website\",\"url\":\"https://api.aoskin.ru/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://api.aoskin.ru/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\",\"url\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"contentUrl\":\"https://api.aoskin.ru/wp-content/uploads/2024/06/12.webp\",\"width\":1456,\"height\":816,\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https://api.aoskin.ru/#/schema/person/image/\"},\"sameAs\":[\"http://api.aoskin.ru\"]}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":305,"robots":306,"canonical":301,"og_locale":50,"og_type":51,"og_title":305,"og_url":301,"og_site_name":52,"twitter_card":62,"schema":307},"JavaScript Archives - api.aoskin.ru",{"index":45,"follow":46,"max-snippet":47,"max-image-preview":48,"max-video-preview":49},{"@context":66,"@graph":308},[309,314,318,324],{"@type":310,"@id":301,"url":301,"name":305,"isPartOf":311,"breadcrumb":312,"inLanguage":82},"CollectionPage",{"@id":92},{"@id":313},"https://api.aoskin.ru/category/javascript/#breadcrumb",{"@type":104,"@id":313,"itemListElement":315},[316,317],{"@type":107,"position":23,"name":108,"item":109},{"@type":107,"position":111,"name":81},{"@type":113,"@id":92,"url":109,"name":114,"description":26,"publisher":319,"alternateName":114,"potentialAction":320,"inLanguage":82},{"@id":73},[321],{"@type":118,"target":322,"query-input":323},{"@type":120,"urlTemplate":121},{"@type":123,"valueRequired":124,"valueName":125},{"@type":325,"@id":73,"name":61,"image":326,"logo":327,"sameAs":328},[128,129],{"@type":102,"inLanguage":82,"@id":131,"url":59,"contentUrl":59,"width":57,"height":58,"caption":61},{"@id":131},[135],[],{"self":331,"collection":336,"about":339,"wp:post_type":342,"curies":345},[332],{"href":333,"targetHints":334},"https://api.aoskin.ru/wp-json/wp/v2/categories/17",{"allow":335},[144,145,146,147,148],[337],{"href":338},"https://api.aoskin.ru/wp-json/wp/v2/categories",[340],{"href":341},"https://api.aoskin.ru/wp-json/wp/v2/taxonomies/category",[343],{"href":344},"https://api.aoskin.ru/wp-json/wp/v2/posts?categories=17",[346],{"name":184,"href":185,"templated":124},[],1766752309607]