{"id":28619,"date":"2021-07-28T12:15:34","date_gmt":"2021-07-28T05:15:34","guid":{"rendered":"https:\/\/wiki.tino.org\/staging\/?p=28619"},"modified":"2021-07-30T18:37:14","modified_gmt":"2021-07-30T11:37:14","slug":"async-await-la-gi","status":"publish","type":"post","link":"https:\/\/tino.vn\/blog\/async-await-la-gi\/","title":{"rendered":"Async Await l\u00e0 g\u00ec? 6 l\u00fd do khi\u1ebfn Async Await tr\u1edf n\u00ean v\u01b0\u1ee3t tr\u1ed9i"},"content":{"rendered":"\n<p><strong>Khi th\u1ef1c hi\u1ec7n code b\u1ea5t \u0111\u1ed3ng b\u1ed9 trong JavaScript, th\u00f4ng th\u01b0\u1eddng b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng callback ho\u1eb7c Promise. Tuy nhi\u00ean, v\u1eabn c\u00f3 1 c\u00e1ch \u0111\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi code b\u1ea5t \u0111\u1ed3ng b\u1ed9 \u0111\u01a1n gi\u1ea3n v\u00e0 hi\u1ec7u qu\u1ea3 h\u01a1n, \u0111\u00f3 ch\u00ednh l\u00e0 Async Await. V\u1eady, Async Await l\u00e0 g\u00ec? Nh\u1eefng m\u1eabu code v\u00ed d\u1ee5 cho Async Await v\u00e0 l\u00fd do t\u1ea1i sao n\u00ean d\u00f9ng Async Await<\/strong> <strong>s\u1ebd \u0111\u01b0\u1ee3c Tino Group h\u00e9 l\u1ed9 trong b\u00e0i vi\u1ebft nh\u00e9!<\/strong><\/p>\n\n\n\n<h2 id=\"Async_Await_l\u00e0_g\u00ec?\"><a id=\"post-28619-_rjbr5vcoa1nl\"><\/a><strong>Async Await l\u00e0 g\u00ec?<\/strong><\/h2>\n\n\n\n<p>JavaScript lu\u00f4n \u0111\u01b0\u1ee3c c\u1ea3i ti\u1ebfn v\u00e0 trong b\u1ea3n c\u1eadp nh\u1eadt ES7 v\u00e0o n\u0103m 2016, <a href=\"https:\/\/tino.vn\/blog\/html-css-javascript-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">JavaScript<\/a> \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u00eam r\u1ea5t nhi\u1ec1u function (<em>ch\u1ee9c n\u0103ng<\/em>) m\u1edbi \u0111\u01b0\u1ee3c nh\u01b0: Arrow Functions, Array methods, Loops for\/in, Template literals,&#8230;<\/p>\n\n\n\n<p>V\u00e0 trong \u0111\u00f3 c\u00f3 m\u1ed9t function m\u1edbi \u0111\u1ec3 gi\u1ea3i quy\u1ebft b\u00e0i to\u00e1n b\u1ea5t \u0111\u1ed3ng b\u1ed9 m\u1ed9t c\u00e1ch nhanh g\u1ecdn h\u01a1n, \u0111\u00f3 ch\u00ednh l\u00e0 Async Await function.<\/p>\n\n\n\n<p>Async Await \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n d\u1ef1a tr\u00ean n\u1ec1n t\u1ea3ng c\u1ee7a Promise function v\u00e0 t\u01b0\u01a1ng th\u00edch v\u1edbi t\u1ea5t c\u1ea3 Promise n\u00e0o d\u1ef1a tr\u00ean API \u0111\u1ec3 x\u1eed l\u00fd c\u00e1c tr\u01b0\u1eddng h\u1ee3p b\u1ea5t \u0111\u1ed3ng b\u1ed9.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1462.png\" alt=\"async-await-la-gi\" class=\"wp-image-28621\" width=\"689\" height=\"387\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1462.png 817w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1462-300x169.png 300w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1462-768x432.png 768w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/figure><\/div>\n\n\n\n<p>Trong \u0111\u00f3, ta c\u00f3 Async Await v\u1edbi t\u00ednh n\u0103ng nh\u01b0 sau:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Async <\/strong>\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 khai b\u00e1o m\u1ed9t h\u00e0m b\u1ea5t \u0111\u1ed3ng b\u1ed9 v\u00e0 h\u00e0m s\u1ebd lu\u00f4n tr\u1ea3 v\u1ec1 m\u1ed9t gi\u00e1 tr\u1ecb. N\u1ebfu Promise kh\u00f4ng \u0111\u01b0\u1ee3c th\u1ef1c thi, JavaScript s\u1ebd t\u1ef1 \u0111\u1ed9ng k\u1ebft th\u00fac qu\u00e1 tr\u00ecnh.<\/li><li><strong>Await <\/strong>\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1edd m\u1ed9t Promises trong m\u1ed9t kh\u1ed1i Async, c\u00f4ng d\u1ee5ng d\u1ec5 hi\u1ec3u c\u1ee7a Await l\u00e0 \u201ck\u00eau\u201d JavaScript ph\u1ea3i ch\u1edd cho \u0111\u1ebfn khi n\u00e0o c\u00f3 m\u1ed9t Promise tr\u1ea3 k\u1ebft qu\u1ea3. Trong \u0111\u00f3, await ch\u1ec9 c\u00f3 c\u00f4ng d\u1ee5ng th\u1ef1c hi\u1ec7n ch\u1ee9c n\u0103ng t\u1ea1o ra s\u1ef1 kh\u00f4ng \u0111\u1ed3ng b\u1ed9 b\u1eb1ng c\u00e1ch ch\u1edd 1 kh\u1ed1i tr\u1ea3 k\u1ebft qu\u1ea3, await kh\u00f4ng ch\u1edd \u0111\u1ee3i to\u00e0n b\u1ed9 k\u1ebft qu\u1ea3 trong ch\u01b0\u01a1ng tr\u00ecnh \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1.<\/li><\/ul>\n\n\n\n<h3 id=\"C\u00fa_ph\u00e1p_c\u1ee7a_Async\"><a id=\"post-28619-_nkqhfd80x39q\"><\/a><strong>C\u00fa ph\u00e1p c\u1ee7a Async<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ed1i v\u1edbi Async, b\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u1eb7t t\u1eeb Async ngay tr\u01b0\u1edbc 1 h\u00e0m l\u00e0m cho h\u00e0m \u0111\u00f3 tr\u1ea3 v\u1ec1 Promise l\u00e0 \u0111\u01b0\u1ee3c. V\u00ed d\u1ee5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function myFunction() {\n\n return \"Hello\";\n\n}<\/code><\/pre>\n\n\n\n<p>T\u01b0\u01a1ng t\u1ef1, b\u1ea1n \u0111\u1eb7t v\u00e0o tr\u01b0\u1edbc Promise nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function myFunction() {\n\n return Promise.resolve(\"Hello\");\n\n}<\/code><\/pre>\n\n\n\n<p>So s\u00e1nh v\u1edbi tr\u01b0\u1eddng h\u1ee3p b\u1ea1n ch\u1ec9 s\u1eed d\u1ee5ng <strong>Promise<\/strong>, c\u00e2u l\u1ec7nh c\u1ee7a b\u1ea1n s\u1ebd tr\u1edf n\u00ean nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>myFunction().then(\n\n function(value) { \/* code if successful *\/ },\n\n function(error) { \/* code if some error *\/ }\n\n);<\/code><\/pre>\n\n\n\n<h3 id=\"C\u00fa_ph\u00e1p_c\u1ee7a_Await\"><a id=\"post-28619-_psy14omikkgb\"><\/a><strong>C\u00fa ph\u00e1p c\u1ee7a Await<\/strong><\/h3>\n\n\n\n<p>C\u00e1ch s\u1eed d\u1ee5ng c\u0169ng kh\u00e1 t\u01b0\u01a1ng t\u1ef1 Async, b\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u1eb7t t\u1eeb Await tr\u01b0\u1edbc 1 h\u00e0m s\u1ebd l\u00e0m cho h\u00e0m \u0111\u00f3 ch\u1edd Promise. Tuy nhi\u00ean, b\u1ea1n ch\u1ec9 c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Await b\u00ean trong kh\u1ed1i x\u1eed l\u00fd c\u1ee7a Async th\u00f4i nh\u00e9!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let value = await Promise;<\/code><\/pre>\n\n\n\n<p>V\u00ed d\u1ee5 c\u01a1 b\u1ea3n khi s\u1eed d\u1ee5ng Await:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n\n&lt;html&gt;\n\n&lt;body&gt;\n\n&lt;h2&gt;JavaScript Async \/ Await&lt;\/h2&gt;\n\n&lt;p&gt;\u0110\u1ee3i x\u00edu! 3 gi\u00e2y th\u00f4i l\u00e0 b\u1ea1n c\u00f3 th\u1ec3 nh\u00ecn th\u1ea5y \u0111i\u1ec1u b\u1ea5t ng\u1edd.&lt;\/p&gt;\n\n&lt;h1 id=\"demo\"&gt;&lt;\/h1&gt;\n\n&lt;script&gt;\n\nasync function myDisplay() {\n\n let myPromise = new Promise(function(myResolve, myReject) {\n\n setTimeout(function() { myResolve(\"B\u1ea1n \u0111\u1ee3i d\u00f2ng n\u00e0y \u0111\u01b0\u1ee3c 3S r\u1ed3i \u0111\u00f3!!\"); }, 3000);\n\n });\n\n document.getElementById(\"demo\").innerHTML = await myPromise;\n\n}\n\nmyDisplay();\n\n&lt;\/script&gt;\n\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>K\u1ebft qu\u1ea3 \u0111\u1ea7u ra b\u1ea1n s\u1ebd c\u00f3 nh\u01b0 sau:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1463.png\" alt=\"async-await-la-gi\" class=\"wp-image-28622\" width=\"612\" height=\"298\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1463.png 498w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1463-300x146.png 300w\" sizes=\"(max-width: 612px) 100vw, 612px\" \/><\/figure><\/div>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i n\u1ed9i dung code v\u00e0 ch\u1ea1y th\u1eed<a href=\"https:\/\/www.w3schools.com\/js\/tryit.asp?filename=tryjs_async4\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"> t\u1ea1i \u0111\u00e2y<\/a>.<\/p>\n\n\n\n<h2 id=\"6_l\u00fd_do_v\u00ec_sao_b\u1ea1n_n\u00ean_s\u1eed_d\u1ee5ng_Async_Await\"><a id=\"post-28619-_5upezpkivobv\"><\/a><strong>6 l\u00fd do v\u00ec sao b\u1ea1n n\u00ean s\u1eed d\u1ee5ng Async Await<\/strong><\/h2>\n\n\n\n<h3 id=\"Code_tr\u1ef1c_quan,_ng\u1eafn_g\u1ecdn_v\u00e0_\u0111\u01a1n_gi\u1ea3n\"><a id=\"post-28619-_2n7zs9dfinm8\"><\/a><strong>Code tr\u1ef1c quan, ng\u1eafn g\u1ecdn v\u00e0 \u0111\u01a1n gi\u1ea3n<\/strong><\/h3>\n\n\n\n<p>T\u1ea5t nhi\u00ean, \u0111\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng \u01b0u \u0111i\u1ec3m tuy\u1ec7t v\u1eddi nh\u1ea5t c\u1ee7a Async Await. Khi vi\u1ebft code, b\u1ea1n s\u1ebd kh\u00f4ng b\u1ecb nh\u1eefng d\u00f2ng code ph\u1ee9c t\u1ea1p l\u00e0m ch\u1eafn ngang d\u00f2ng suy ngh\u0129 c\u1ee7a b\u1ea1n. V\u00ed d\u1ee5: b\u1ea1n ch\u1ec9 c\u1ea7n try\/catch \u0111\u1ec3 b\u1eaft l\u1ed7i v\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i then sau \u0111\u00f3 catch, =&gt; code c\u1ee7a b\u1ea1n s\u1ebd tr\u1edf n\u00ean d\u00e0i d\u00f2ng, v\u00f4 c\u00f9ng ph\u1ee9c t\u1ea1p.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1464.png\" alt=\"async-await-la-gi\" class=\"wp-image-28623\" width=\"702\" height=\"389\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1464.png 650w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1464-300x166.png 300w\" sizes=\"(max-width: 702px) 100vw, 702px\" \/><\/figure><\/div>\n\n\n\n<h3 id=\"Kh\u1ea3_n\u0103ng_t\u0103ng_t\u1ed1c_x\u1eed_l\u00fd_l\u1ed7i\"><a id=\"post-28619-_q5lkxwgn5yjp\"><\/a><strong>Kh\u1ea3 n\u0103ng t\u0103ng t\u1ed1c x\u1eed l\u00fd l\u1ed7i<\/strong><\/h3>\n\n\n\n<p>N\u1ebfu b\u1ea1n c\u1ea3m gi\u00e1c try\/catch v\u1eabn ch\u01b0a \u0111\u1ee7 \u0111\u1ec3 x\u1eed l\u00fd c\u00e1c l\u1ed7i, v\u00ed d\u1ee5 nh\u01b0 \u0111o\u1ea1n code try\/catch sau \u0111\u00e2y:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = () =&gt; {\n\n try {\n\n getJSON()\n\n .then(result =&gt; {\n\n \/\/ this parse may fail\n\n const data = JSON.parse(result)\n\n console.log(data)\n\n })\n\n \/\/ b\u1ecf ghi ch\u00fa kh\u1ed1i n\u00e0y \u0111\u1ec3 x\u1eed l\u00fd l\u1ed7i kh\u00f4ng \u0111\u1ed3ng b\u1ed9 b\u1eb1ng c\u00e1ch x\u00f3a d\u00f2ng v\u00e0 x\u00f3a lu\u00f4n c\u00e1c d\u1ea5u \/\/\n\n \/\/ .catch((err) =&gt; {\n\n \/\/ console.log(err)\n\n \/\/ })\n\n } catch (err) {\n\n console.log(err)\n\n }<\/code><\/pre>\n\n\n\n<p>V\u1edbi c\u00e1ch th\u1ee9c code Promise th\u1ebf n\u00e0y, try\/catch s\u1ebd kh\u00f4ng th\u1ec3 t\u00ecm v\u00e0 b\u1eaft \u0111\u01b0\u1ee3c c\u00e1c l\u1ed7i n\u1ebfu JSON.parse x\u1ea3y ra l\u1ed7i b\u00ean trong Promise. N\u1ebfu mu\u1ed1n x\u1eed l\u00fd, b\u1ea1n s\u1ebd ph\u1ea3i g\u1ecdi .catch b\u00ean trong v\u00e0 l\u1eb7p l\u1ea1i code l\u1ea7n n\u1eefa \u0111\u1ec3 x\u1eed l\u00fd l\u1ed7i! \u0110i\u1ec1u n\u00e0y ph\u1ee9c t\u1ea1p th\u1ef1c s\u1ef1 \u0111\u1ea5y ch\u1ee9!<\/p>\n\n\n\n<p>Gi\u1edd \u0111\u00e2y, ch\u00fang ta s\u1ebd x\u1eed l\u00fd b\u1eb1ng Async Await. B\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y r\u1eb1ng catch ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 b\u1eaft l\u1ed7i c\u00fa ph\u00e1p.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = async () =&gt; {\n\n try {\n\n \/\/ ph\u00e2n t\u00edch c\u00fa ph\u00e1p n\u00e0y c\u00f3 th\u1ec3 kh\u00f4ng th\u00e0nh c\u00f4ng\n\n const data = JSON.parse(await getJSON())\n\n console.log(data)\n\n } catch (err) {\n\n console.log(err)\n\n }\n\n}<\/code><\/pre>\n\n\n\n<h3 id=\"\u0110\u01a1n_gi\u1ea3n_h\u00f3a_c\u00e2u_\u0111i\u1ec1u_ki\u1ec7n\"><a id=\"post-28619-_ak9c5yu5pg03\"><\/a><strong>\u0110\u01a1n gi\u1ea3n h\u00f3a c\u00e2u \u0111i\u1ec1u ki\u1ec7n<\/strong><\/h3>\n\n\n\n<p>V\u00ed d\u1ee5 b\u1ea1n mu\u1ed1n n\u1ea1p d\u1eef li\u1ec7u v\u00e0 sau \u0111\u00f3 x\u1eed l\u00fd r\u1ed3i quy\u1ebft \u0111\u1ecbnh b\u1ea1n s\u1ebd tr\u1ea3 d\u1eef li\u1ec7u l\u1ea1i ho\u1eb7c l\u1ea5y th\u00eam chi ti\u1ebft d\u1ef1a tr\u00ean c\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o. Th\u00f4ng th\u01b0\u1eddng, ta s\u1ebd code b\u1eb1ng c\u00e1ch l\u1ed3ng nhi\u1ec1u \u0111i\u1ec1u ki\u1ec7n nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = () =&gt; {\n\n return getJSON()\n\n .then(data =&gt; {\n\n if (data.needsAnotherRequest) {\n\n return makeAnotherRequest(data)\n\n .then(moreData =&gt; {\n\n console.log(moreData)\n\n return moreData\n\n })\n\n } else {\n\n console.log(data)\n\n return data\n\n }\n\n })\n\n}<\/code><\/pre>\n\n\n\n<p>Nh\u01b0 b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y, \u0111o\u1ea1n code c\u00f3 t\u1eadn 6 \u0111i\u1ec1u ki\u1ec7n l\u1ed3ng nhau! B\u1ea1n ch\u1ec9 c\u1ea7n \u0111\u1ecdc qua, b\u1ea1n s\u1ebd c\u1ea3m gi\u00e1c cho\u00e1ng v\u1edbi \u0111o\u1ea1n code n\u00e0y, \u0111\u00f4i khi b\u1ea1n s\u1ebd b\u1ecb nh\u1ea7m l\u1eabn v\u00e0 \u201cb\u01a1i\u201d trong m\u1edb h\u1ed7n \u0111\u1ed9n. Thay v\u00ec ch\u1ea5p nh\u1eadn m\u1edb \u201ch\u1ed7n \u0111\u1ed9n\u201d k\u1ebft h\u1ee3p if\/else \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Async Await \u0111\u1ec3 x\u1eed l\u00fd \u0111\u01a1n gi\u1ea3n &#8211; d\u1ec5 hi\u1ec3u h\u01a1n nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = async () =&gt; {\n\n const data = await getJSON()\n\n if (data.needsAnotherRequest) {\n\n const moreData = await makeAnotherRequest(data);\n\n console.log(moreData)\n\n return moreData\n\n } else {\n\n console.log(data)\n\n return data \n\n }\n\n}<\/code><\/pre>\n\n\n\n<h3 id=\"\u0110\u01a1n_gi\u1ea3n_h\u00f3a_c\u00e1c_Promise_tr\u1ea3_v\u1ec1\"><a id=\"post-28619-_vo2pbfv972lz\"><\/a><strong>\u0110\u01a1n gi\u1ea3n h\u00f3a c\u00e1c Promise tr\u1ea3 v\u1ec1<\/strong><\/h3>\n\n\n\n<p>V\u00ed d\u1ee5 trong tr\u01b0\u1eddng h\u1ee3p b\u1ea1n g\u1ecdi 1 Promise1 sau \u0111\u00f3 quay tr\u1edf l\u1ea1i v\u00e0 g\u1ecdi Promise2. K\u1ebft qu\u1ea3 c\u1ee7a ch\u00fang th\u1ecfa \u0111i\u1ec1u ki\u1ec7n v\u00e0 s\u1ebd g\u1ecdi \u0111\u1ebfn Promise3. \u0110o\u1ea1n code c\u1ee7a b\u1ea1n s\u1ebd nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = () =&gt; {\n\n return Promise1()\n\n .then(value1 =&gt; {\n\n \/\/ do something\n\n return Promise2(value1)\n\n .then(value2 =&gt; {\n\n \/\/ do something \n\n return Promise3(value1, value2)\n\n })\n\n })\n\n}<\/code><\/pre>\n\n\n\n<p>Trong tr\u01b0\u1eddng h\u1ee3p Promise3 c\u1ee7a b\u1ea1n kh\u00f4ng y\u00eau c\u1ea7u gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1 c\u1ee7a value1, code s\u1ebd \u0111\u01a1n gi\u1ea3n h\u01a1n \u0111\u01b0\u1ee3c m\u1ed9t ch\u00fat. N\u1ebfu m\u1ed9t tr\u01b0\u1eddng h\u1ee3p kh\u00e1c v\u1edbi nhi\u1ec1u \u0111i\u1ec1u ki\u1ec7n tr\u1ea3 v\u1ec1 h\u01a1n, m\u1ee9c \u0111\u1ed9 l\u1ed3ng s\u00e2u h\u01a1n b\u1ea1n s\u1ebd tr\u1edf n\u00ean r\u1eafc r\u1ed1i \u0111\u1ea5y! Thay v\u00ec l\u1ed3ng nh\u01b0 v\u1eady, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng <strong>Promise.all<\/strong> \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 \u0111\u01a1n gi\u1ea3n h\u01a1n (v\u00ed d\u1ee5 Promise3 c\u1ee7a b\u1ea1n y\u00eau c\u1ea7u c\u1ea3 value1 v\u00e0 value2 m\u1edbi \u0111\u1ee7 th\u1ecfa m\u00e3n).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = () =&gt; {\n\n return Promise1()\n\n .then(value1 =&gt; {\n\n \/\/ do something\n\n return Promise.all(&#91;value1, Promise2(value1)])\n\n })\n\n .then((&#91;value1, value2]) =&gt; {\n\n \/\/ do something \n\n return Promise3(value1, value2)\n\n })\n\n}<\/code><\/pre>\n\n\n\n<p>\u0110\u01a1n gi\u1ea3n h\u01a1n n\u1eefa, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Async Await \u0111\u1ec3 x\u1eed l\u00fd nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = async () =&gt; {\n\n const value1 = await Promise1()\n\n const value2 = await Promise2(value1)\n\n return Promise3(value1, value2)\n\n}<\/code><\/pre>\n\n\n\n<p>Thay v\u00ec 1 \u201c\u0111\u1ed1ng\u201d c\u00e1c h\u00e0m c\u00e1c \u0111i\u1ec1u ki\u1ec7n, gi\u1edd \u0111\u00e2y, b\u1ea1n ch\u1ec9 c\u1ea7n code \u00edt h\u01a1n v\u00e0 n\u1ebfu c\u00f3 m\u1ed9t ng\u01b0\u1eddi kh\u00e1c gi\u00fap b\u1ea1n s\u1eeda code, h\u1ecd c\u0169ng \u201cd\u1ec5 th\u1edf\u201d h\u01a1n r\u1ea5t nhi\u1ec1u \u0111\u1ec3 hi\u1ec3u v\u00e0 gi\u00fap b\u1ea1n t\u1ed1t h\u01a1n.<\/p>\n\n\n\n<h3 id=\"T\u1ea1o_ghi_ch\u00fa_l\u1ed7i\"><a id=\"post-28619-_jtrr7p5war70\"><\/a><strong>T\u1ea1o ghi ch\u00fa l\u1ed7i<\/strong><\/h3>\n\n\n\n<p>V\u00ed d\u1ee5, b\u1ea1n c\u00f3 m\u1ed9t \u0111o\u1ea1n code s\u1ebd g\u1ecdi nhi\u1ec1u Promise c\u00f9ng l\u00fac trong chu\u1ed7i v\u00e0 \u1edf \u0111\u00e2u trong chu\u1ed7i \u0111\u00f3 c\u00f3 m\u1ed9t l\u1ed7i nh\u01b0 trong \u0111o\u1ea1n code n\u00e0y:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = () =&gt; {\n\n return callAPromise()\n\n .then(() =&gt; callAPromise())\n\n .then(() =&gt; callAPromise())\n\n .then(() =&gt; callAPromise())\n\n .then(() =&gt; callAPromise())\n\n .then(() =&gt; {\n\n throw new Error(\"oops\");\n\n })\n\n}\n\nmakeRequest()\n\n .catch(err =&gt; {\n\n console.log(err);\n\n \/\/ output\n\n \/\/ Error: oops at callAPromise.then.then.then.then.then (index.js:9:99)<\/code><\/pre>\n\n\n\n<p>Nh\u01b0 b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y, nh\u1eadt k\u00fd ghi l\u1ed7i c\u1ee7a b\u1ea1n ch\u1ec9 tr\u1ea3 v\u1ec1 s\u1ed1 d\u00f2ng v\u00e0 h\u00e0m b\u1ecb l\u1ed7i c\u1ee5 th\u1ec3. Ch\u1ec9 duy nh\u1ea5t m\u1ed9t d\u00f2ng b\u1ecb tr\u1ea3 v\u1ec1 l\u00e0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Error: oops at callAPromise.then.then.then.then.then (index.js:9:99)<\/code><\/pre>\n\n\n\n<p>N\u1ebfu s\u1eed d\u1ee5ng Async Await, n\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c tr\u1ea3 t\u1edbi t\u1eadn h\u00e0m n\u00e0o b\u1ecb x\u1ea3y ra l\u1ed7i lu\u00f4n, v\u00ed d\u1ee5 tr\u1ef1c quan nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const makeRequest = async () =&gt; {\n\n await callAPromise()\n\n await callAPromise()\n\n await callAPromise()\n\n await callAPromise()\n\n await callAPromise()\n\n throw new Error(\"oops\");\n\n}\n\nmakeRequest()\n\n .catch(err =&gt; {\n\n console.log(err);\n\n \/\/ output\n\n \/\/ Error: oops at makeRequest (index.js:7:9)\n\n })<\/code><\/pre>\n\n\n\n<p>Khi b\u1ea1n \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ecba ch\u1ec9 nh\u00e0 v\u00e0 bi\u1ebft lu\u00f4n c\u1ea3 ch\u1ee7 nh\u00e0, vi\u1ec7c s\u1eeda l\u1ed7i s\u1ebd tr\u1edf n\u00ean d\u1ec5 d\u00e0ng h\u01a1n v\u00f4 c\u00f9ng. Nh\u01b0 b\u1ea1n th\u1ea5y \u1edf \u0111\u00e2y, h\u00e0m <strong>makeRequest <\/strong>\u0111\u00e3 b\u1ecb l\u1ed7i v\u00e0 \u0111\u01b0a ch\u00fang ta \u0111\u1ebfn l\u00fd do th\u1ee9 6: s\u1eeda l\u1ed7i \u0111\u01a1n gi\u1ea3n v\u00e0 d\u1ec5 d\u00e0ng.<\/p>\n\n\n\n<h3 id=\"Debug_\u0111\u01a1n_gi\u1ea3n_v\u00e0_d\u1ec5_d\u00e0ng_h\u01a1n\"><a id=\"post-28619-_m4i8okk6atn6\"><\/a><strong>Debug \u0111\u01a1n gi\u1ea3n v\u00e0 d\u1ec5 d\u00e0ng h\u01a1n<\/strong><\/h3>\n\n\n\n<p>Kh\u00f4ng n\u1ed7i \u0111au n\u00e0o to h\u01a1n vi\u1ec7c \u0111i s\u1eeda l\u1ed7i code! V\u00e0 s\u1eed d\u1ee5ng Async Await s\u1ebd gi\u00fap b\u1ea1n s\u1eeda l\u1ed7i tr\u1edf n\u00ean d\u1ec5 d\u00e0ng h\u01a1n r\u1ea5t nhi\u1ec1u! V\u1edbi Async Await, b\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ea1y s\u1eeda l\u1ed7i t\u1eebng d\u00f2ng nh\u01b0 th\u00f4ng th\u01b0\u1eddng v\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i g\u1ecdi arrow functions nhi\u1ec1u l\u1ea7n l\u00e0m m\u1ecdi th\u1ee9 tr\u1edf n\u00ean ph\u1ee9c t\u1ea1p.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1465.png\" alt=\"async-await-la-gi\" class=\"wp-image-28624\" width=\"773\" height=\"263\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1465.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2021\/07\/word-image-1465-300x102.png 300w\" sizes=\"(max-width: 773px) 100vw, 773px\" \/><\/figure><\/div>\n\n\n\n<p>Qua b\u00e0i vi\u1ebft, b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y \u0111\u01b0\u1ee3c r\u1eb1ng Async Await \u0111\u00e3 gi\u00fap vi\u1ec7c code c\u1ee7a b\u1ea1n tr\u1edf n\u00ean tr\u1ef1c quan h\u01a1n, ng\u1eafn g\u1ecdn h\u01a1n v\u00e0 d\u1ec5 d\u00e0ng hi\u1ec3u h\u01a1n bao gi\u1edd h\u1ebft. Tino Group hi v\u1ecdng v\u1edbi nh\u1eefng v\u00ed d\u1ee5 n\u00e0y c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n x\u1eed l\u00fd code c\u1ee7a m\u00ecnh \u0111\u1eb9p v\u00e0 g\u1ecdn h\u01a1n!<\/p>\n\n\n\n<p>B\u00e0i vi\u1ebft c\u00f3 tham kh\u1ea3o n\u1ed9i dung t\u1eeb: <a href=\"https:\/\/hackernoon.com\/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Hackernoon<\/a>, <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/async_function\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Developer Mozilla <\/a>v\u00e0 <a href=\"https:\/\/www.w3schools.com\/js\/js_async.asp\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">W3School<\/a>.<\/p>\n\n\n\n<h2 id=\"Nh\u1eefng_c\u00e2u_h\u1ecfi_th\u01b0\u1eddng_g\u1eb7p\"><a id=\"post-28619-_vmtrcpfmhw3k\"><\/a><strong>Nh\u1eefng c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p<\/strong><\/h2>\n\n\n\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"Callback_Function_l\u00e0_g\u00ec?\">Callback Function l\u00e0 g\u00ec?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>M\u00f4 t\u1ea3 \u0111\u01a1n gi\u1ea3n, Callback l\u00e0 ho\u1ea1t \u0111\u1ed9ng truy\u1ec1n \u0111o\u1ea1n code A v\u00e0o m\u1ed9t \u0111o\u1ea1n code B v\u00e0 t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m, s\u1ef1 ki\u1ec7n n\u00e0o \u0111\u00f3, \u0111o\u1ea1n code A c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n g\u1ecdi \u0111o\u1ea1n code B nh\u1eb1m x\u1eed l\u00fd m\u1ed9t s\u1ef1 ki\u1ec7n b\u1ea5t \u0111\u1ed3ng b\u1ed9.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"Promise_c\u00f3_tr\u1edf_n\u00ean_l\u1ed7i_th\u1eddi_hay_kh\u00f4ng?\">Promise c\u00f3 tr\u1edf n\u00ean l\u1ed7i th\u1eddi hay kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>Kh\u00f4ng, v\u1eabn c\u00f3 r\u1ea5t nhi\u1ec1u tr\u01b0\u1eddng h\u1ee3p Async Await kh\u00f4ng th\u1ec3 gi\u1ea3i quy\u1ebft \u0111\u01b0\u1ee3c v\u00e0 b\u1ea1n v\u1eabn s\u1ebd ph\u1ea3i s\u1eed d\u1ee5ng Promise \u0111\u1ec3 x\u1eed l\u00fd.<\/p>\n\n\n\n<p>Ngo\u00e0i ra, b\u1ea1n c\u0169ng n\u00ean h\u1ecdc th\u00eam v\u1ec1 Promise \u0111\u1ec3 c\u00f3 ki\u1ebfn th\u1ee9c n\u1ec1n t\u1ea3ng t\u1ed1t h\u01a1n v\u00e0 s\u1eed d\u1ee5ng Async Await \u0111\u01b0\u1ee3c \u201cngon l\u00e0nh\u201d h\u01a1n.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"Async_Await_\u0111\u01b0\u1ee3c_h\u1ed7_tr\u1ee3_tr\u00ean_phi\u00ean_b\u1ea3n_tr\u00ecnh_duy\u1ec7t_n\u00e0o?\">Async Await \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 tr\u00ean phi\u00ean b\u1ea3n tr\u00ecnh duy\u1ec7t n\u00e0o?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>Tr\u1eeb duy nh\u1ea5t tr\u00ecnh duy\u1ec7t Internet Explorer phi\u00ean b\u1ea3n 7.0 tr\u1edf xu\u1ed1ng s\u1ebd kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3, c\u00f2n h\u1ea7u h\u1ebft c\u00e1c phi\u00ean b\u1ea3n tr\u00ecnh duy\u1ec7t kh\u00e1c \u0111\u1ec1u \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"H\u1ecdc_th\u00eam_v\u1ec1_Async_Await_\u1edf_\u0111\u00e2u?\">H\u1ecdc th\u00eam v\u1ec1 Async Await \u1edf \u0111\u00e2u?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 h\u1ecdc t\u1ea1i trang W3School ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed <a href=\"https:\/\/www.w3schools.com\/js\/js_async.asp\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">\u1edf \u0111\u00e2y<\/a>. Kh\u00f4ng ch\u1ec9 h\u1ecdc v\u1ec1 Async Await, b\u1ea1n c\u00f2n \u0111\u01b0\u1ee3c h\u1ecdc v\u1ec1 JS, SQL, Python, PHP, Java,&#8230; c\u00f9ng nhi\u1ec1u ng\u00f4n ng\u1eef kh\u00e1c m\u1ed9t c\u00e1ch ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed!<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\n<script type=\"application\/ld+json\">\n\t{\n\t\t\"@context\": \"https:\/\/schema.org\",\n\t\t\"@type\": \"FAQPage\",\n\t\t\"mainEntity\": [\n\t\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"Callback Function l\u00e0 g\u00ec?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>M\u00f4 t\u1ea3 \u0111\u01a1n gi\u1ea3n, Callback l\u00e0 ho\u1ea1t \u0111\u1ed9ng truy\u1ec1n \u0111o\u1ea1n code A v\u00e0o m\u1ed9t \u0111o\u1ea1n code B v\u00e0 t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m, s\u1ef1 ki\u1ec7n n\u00e0o \u0111\u00f3, \u0111o\u1ea1n code A c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n g\u1ecdi \u0111o\u1ea1n code B nh\u1eb1m x\u1eed l\u00fd m\u1ed9t s\u1ef1 ki\u1ec7n b\u1ea5t \u0111\u1ed3ng b\u1ed9.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"Promise c\u00f3 tr\u1edf n\u00ean l\u1ed7i th\u1eddi hay kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Kh\u00f4ng, v\u1eabn c\u00f3 r\u1ea5t nhi\u1ec1u tr\u01b0\u1eddng h\u1ee3p Async Await kh\u00f4ng th\u1ec3 gi\u1ea3i quy\u1ebft \u0111\u01b0\u1ee3c v\u00e0 b\u1ea1n v\u1eabn s\u1ebd ph\u1ea3i s\u1eed d\u1ee5ng Promise \u0111\u1ec3 x\u1eed l\u00fd.<\/p><p>Ngo\u00e0i ra, b\u1ea1n c\u0169ng n\u00ean h\u1ecdc th\u00eam v\u1ec1 Promise \u0111\u1ec3 c\u00f3 ki\u1ebfn th\u1ee9c n\u1ec1n t\u1ea3ng t\u1ed1t h\u01a1n v\u00e0 s\u1eed d\u1ee5ng Async Await \u0111\u01b0\u1ee3c \u201cngon l\u00e0nh\u201d h\u01a1n.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"Async Await \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 tr\u00ean phi\u00ean b\u1ea3n tr\u00ecnh duy\u1ec7t n\u00e0o?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Tr\u1eeb duy nh\u1ea5t tr\u00ecnh duy\u1ec7t Internet Explorer phi\u00ean b\u1ea3n 7.0 tr\u1edf xu\u1ed1ng s\u1ebd kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3, c\u00f2n h\u1ea7u h\u1ebft c\u00e1c phi\u00ean b\u1ea3n tr\u00ecnh duy\u1ec7t kh\u00e1c \u0111\u1ec1u \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"H\u1ecdc th\u00eam v\u1ec1 Async Await \u1edf \u0111\u00e2u?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>B\u1ea1n c\u00f3 th\u1ec3 h\u1ecdc t\u1ea1i trang W3School ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed <a>\u1edf \u0111\u00e2y<\/a>. Kh\u00f4ng ch\u1ec9 h\u1ecdc v\u1ec1 Async Await, b\u1ea1n c\u00f2n \u0111\u01b0\u1ee3c h\u1ecdc v\u1ec1 JS, SQL, Python, PHP, Java,... c\u00f9ng nhi\u1ec1u ng\u00f4n ng\u1eef kh\u00e1c m\u1ed9t c\u00e1ch ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed!<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t]\n\t}\n<\/script>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Khi th\u1ef1c hi\u1ec7n code b\u1ea5t \u0111\u1ed3ng b\u1ed9 trong JavaScript, th\u00f4ng th\u01b0\u1eddng b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng callback ho\u1eb7c Promise. Tuy nhi\u00ean, v\u1eabn c\u00f3 1 c\u00e1ch \u0111\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi code b\u1ea5t \u0111\u1ed3ng b\u1ed9 \u0111\u01a1n gi\u1ea3n v\u00e0 hi\u1ec7u qu\u1ea3 h\u01a1n, \u0111\u00f3 ch\u00ednh l\u00e0 Async Await. V\u1eady, Async Await l\u00e0 g\u00ec? Nh\u1eefng m\u1eabu code v\u00ed [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":28620,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5404],"tags":[6187],"class_list":["post-28619","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-webmasters","tag-ho-tro-developer"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/28619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=28619"}],"version-history":[{"count":0,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/28619\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/28620"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=28619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/categories?post=28619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=28619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}