{"id":919,"date":"2024-09-25T13:36:13","date_gmt":"2024-09-25T04:36:13","guid":{"rendered":"http:\/\/www.freesens.com\/x\/?p=919"},"modified":"2024-09-25T13:36:14","modified_gmt":"2024-09-25T04:36:14","slug":"js-foreach-%ec%82%ac%ec%9a%a9%ec%8b%9c-async-%ed%95%a8%ec%88%98-%ed%98%b8%ec%b6%9c","status":"publish","type":"post","link":"http:\/\/www.freesens.com\/x\/?p=919","title":{"rendered":"[JS] forEach \uc0ac\uc6a9\uc2dc async \ud568\uc218 \ud638\ucd9c"},"content":{"rendered":"\n<p>\ucd5c\uadfc\uc5d0 \uc5c5\ubb34\uc911 forEach\ub85c \uc21c\ud68c\ud558\uba70 api \ud638\ucd9c \ud6c4 \uacb0\uacfc\ub97c \ubc1b\uc544\uc11c \ub2e4\uc74c \uc791\uc5c5\uc744 \uc218\ud589\ud574\uc57c\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<p>\uc77c\ub2e8 api\uac00 list\ud615\ud0dc\ub85c \ud30c\ub77c\ubbf8\ud130\ub97c \ub358\uc838\uc11c \ud55c\ubc88\uc5d0 \uc870\ud68c \uacb0\uacfc\ub97c \ubc18\ud658\ud574\uc8fc\uba74 \uc131\ub2a5 \uba74\uc5d0\uc11c \ub354 \uc88b\uc744\ud150\ub370, \uad73\uc774 \ub2e8\uac74 \ud638\ucd9c\ub9cc \uac00\ub2a5\ud558\ub3c4\ub85d api\ub97c \uc81c\uacf5\ud558\ub2c8 \uc5b4\uca54 \uc218 \uc5c6\uc774 forEach\ub85c \uc21c\ud68c\ud558\uba70 \uc5ec\ub7ec\ubc88 api\ub97c \ud638\ucd9c\ud560 \uc218 \ubc16\uc5d0 \uc5c6\uc5c8\ub2e4.<\/p>\n\n\n\n<p>\uc5b4\uca0b\ub4e0 \uc758\ub3c4\ub294 forEach\ub85c \uc21c\ud68c\ud558\uba70, async \ud568\uc218\ub85c api\ub97c \ud638\ucd9c \ud6c4 \uacb0\uacfc\ub97c \ubc1b\uc544\uc11c \uac12\uc744 \uc14b\ud305\ud574\uc57c \ud558\ub294\ub370, \ub3cc\ub824\ubcf4\ub2c8 \ube44\ub3d9\uae30 \ud638\ucd9c \ud6c4 \uacb0\uacfc\uac00 \uc624\uae30\ub97c \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \uadf8\ub0e5 \ub2e4\uc74c \uc21c\ud68c\ub97c \ub3cc\uc544\ubc84\ub9ac\ub294 \ubb38\uc81c\uac00 \uc788\uc5c8\ub2e4.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>forEach()&nbsp;expects a synchronous function \u2014 it does not wait for promises. Make sure you are aware of the implications while using promises (or async functions) as forEach&nbsp;callbacks.<\/p>\n<\/blockquote>\n\n\n\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/forEach\" target=\"_blank\" rel=\"noreferrer noopener\">mdn web docs<\/a>\ub97c \ucc3e\uc544\ubcf4\ub2c8 forEach\ub294 promises\ub97c \uae30\ub2e4\ub9ac\uc9c0 \uc54a\ub294\ub2e4\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<p>\uadf8\ub798\uc11c \ub354 \ucc3e\uc544\ubcf4\ub2c8 for of\ubb38\uc744 \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\ub294\ub370, \uc774 \ubc29\ubc95\uc740 \uc21c\ucc28\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\ub2e4 \ubcf4\ub2c8 \ubcd1\ub82c\ucc98\ub9ac\uac00 \uc544\ub2c8\ub77c\uc11c \uc21c\ud68c\uac74\uc218\uac00 \ub9ce\uc73c\uba74 \uc2dc\uac04\uc774 \uc624\ub798\uac78\ub9ac\ub294 \ubb38\uc81c\uac00 \uc788\uace0,<\/p>\n\n\n\n<p>\ubcd1\ub82c\ucc98\ub9ac\ub97c \uc704\ud574\uc11c\ub294 Promise.all()\uc744 \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p>\ube44\ub3d9\uae30\ub85c \ud638\ucd9c\ud574\uc57c \ud558\ub294 api \ud638\ucd9c \ubd80\ubd84\uc744 Promise\ubc30\uc5f4\ub85c \ub9cc\ub4e4\uace0, Promise.all()\uc744 \ud1b5\ud574 \uc2e4\ud589\ud558\uba74 \ube44\ub3d9\uae30 \ud568\uc218\ub4e4\uc744 \ubcd1\ub82c\ub85c \ub3d9\uc2dc\uc5d0 \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre id=\"code_1727237746744\" class=\"wp-block-preformatted\">let apis = [];<br><br>const promises = this.sourceList.map(async (x) => {<br>\tconst api = await calledApi({key: x.value});<br>\tapis.push(api);<br>});<br><br>await Promise.all(promises);<\/pre>\n\n\n\n<p>map()\uc744 \ud1b5\ud574\uc11c promise\ubc30\uc5f4\uc5d0 \ub2f4\uc544\uc11c, Promise.all()\uc744 \ud1b5\ud574 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uacb0\ub860\uc740 \uc21c\ud68c\ud558\uba74\uc11c \ube44\ub3d9\uae30 \ucc98\ub9ac\uac00 \ud544\uc694\ud558\uba74 forEach\ub300\uc2e0\uc5d0 map(async obj) \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><\/p>\n\n\n\n<p><\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ucd5c\uadfc\uc5d0 \uc5c5\ubb34\uc911 forEach\ub85c \uc21c\ud68c\ud558\uba70 api \ud638\ucd9c \ud6c4 \uacb0\uacfc\ub97c \ubc1b\uc544\uc11c \ub2e4\uc74c \uc791\uc5c5\uc744 \uc218\ud589\ud574\uc57c\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc5c8\ub2e4. \uc77c\ub2e8 api\uac00 list\ud615\ud0dc\ub85c \ud30c\ub77c\ubbf8\ud130\ub97c \ub358\uc838\uc11c \ud55c\ubc88\uc5d0 \uc870\ud68c \uacb0\uacfc\ub97c \ubc18\ud658\ud574\uc8fc\uba74 \uc131\ub2a5 \uba74\uc5d0\uc11c \ub354 \uc88b\uc744\ud150\ub370, \uad73\uc774 \ub2e8\uac74 \ud638\ucd9c\ub9cc \uac00\ub2a5\ud558\ub3c4\ub85d api\ub97c \uc81c\uacf5\ud558\ub2c8 \uc5b4\uca54 \uc218 \uc5c6\uc774 forEach\ub85c \uc21c\ud68c\ud558\uba70 \uc5ec\ub7ec\ubc88 api\ub97c \ud638\ucd9c\ud560 \uc218 \ubc16\uc5d0 \uc5c6\uc5c8\ub2e4. \uc5b4\uca0b\ub4e0 \uc758\ub3c4\ub294 forEach\ub85c \uc21c\ud68c\ud558\uba70, async \ud568\uc218\ub85c api\ub97c \ud638\ucd9c \ud6c4 \uacb0\uacfc\ub97c \ubc1b\uc544\uc11c &hellip; <a href=\"http:\/\/www.freesens.com\/x\/?p=919\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">[JS] forEach \uc0ac\uc6a9\uc2dc async \ud568\uc218 \ud638\ucd9c<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[324,6],"tags":[362,332,361,335,360],"class_list":["post-919","post","type-post","status-publish","format-standard","hentry","category-front-end","category-javascript","tag-async","tag-es6","tag-foreach","tag-javascript","tag-promise"],"_links":{"self":[{"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/posts\/919","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=919"}],"version-history":[{"count":1,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/posts\/919\/revisions"}],"predecessor-version":[{"id":920,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=\/wp\/v2\/posts\/919\/revisions\/920"}],"wp:attachment":[{"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=919"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.freesens.com\/x\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}