-
Notifications
You must be signed in to change notification settings - Fork 856
[번역 및 충돌해결] Part1. 11.6-8 (C21) #1861
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 2026-en-merge
Are you sure you want to change the base?
Changes from all commits
1b8842d
a710507
b890ebc
333a74e
473d614
f56c747
fb909e8
3c69192
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,13 +4,7 @@ | |
|
|
||
| 기능을 구현 하다 보면 콜백보다는 프라미스가 더 편리하기 때문에 콜백 기반 함수와 라이브러리를 프라미스를 반환하는 함수로 바꾸는 게 좋은 경우가 종종 생길 겁니다. | ||
|
|
||
| <<<<<<< HEAD | ||
| <info:callbacks> 챕터에서 사용했던 `loadScript(src, callback)` 예시를 사용해 프라미스화에 대해 좀 더 자세히 알아봅시다. | ||
| ======= | ||
| For better understanding, let's see an example. | ||
|
|
||
| For instance, we have `loadScript(src, callback)` from the chapter <info:callbacks>. | ||
| >>>>>>> upstream/master | ||
|
|
||
| ```js run | ||
| function loadScript(src, callback) { | ||
|
|
@@ -27,19 +21,7 @@ function loadScript(src, callback) { | |
| // loadScript('path/script.js', (err, script) => {...}) | ||
| ``` | ||
|
|
||
| <<<<<<< HEAD | ||
| `loadScript(src, callback)`를 이제 프라미스화해봅시다. 새로운 함수 `loadScriptPromise(src)`는 `loadScript`와 동일하게 동작하지만 `callback`을 제외한 `src`만 인수로 받아야 하고, 프라미스를 반환해야 합니다. | ||
| ======= | ||
| The function loads a script with the given `src`, and then calls `callback(err)` in case of an error, or `callback(null, script)` in case of successful loading. That's a widespread agreement for using callbacks, we saw it before. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 문장도 다시 번역해야 합니다. |
||
| >>>>>>> upstream/master | ||
|
|
||
| Let's promisify it. | ||
|
|
||
| We'll make a new function `loadScriptPromise(src)`, that does the same (loads the script), but returns a promise instead of using callbacks. | ||
|
|
||
| In other words, we pass it only `src` (no `callback`) and get a promise in return, that resolves with `script` when the load is successful, and rejects with the error otherwise. | ||
|
|
||
| Here it is: | ||
|
Comment on lines
-36
to
-42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 윗문장이 새롭게 추가된 내용이라 이 부분은 충돌이 나지 않은 것 같습니다. 6년 전 원문은 아래와 같았습니다. 현재 원문은 설명이 더 길어지고 문장 구조도 바뀌었습니다. https://javascript.info/promisify 따라서 기존 번역을 그대로 유지하기보다 새 원문에 맞춰 다시 다듬는 편이 좋을 것 같습니다. |
||
| ```js | ||
| let loadScriptPromise = function(src) { | ||
| return new Promise((resolve, reject) => { | ||
|
|
@@ -54,10 +36,9 @@ let loadScriptPromise = function(src) { | |
| // loadScriptPromise('path/script.js').then(...) | ||
| ``` | ||
|
|
||
| <<<<<<< HEAD | ||
| 새롭게 구현한 `loadScriptPromise`는 프라미스 기반 코드와 잘 융화됩니다. | ||
|
|
||
| 예시에서 볼 수 있듯이, `loadScriptPromise`는 기존 함수 `loadScript`에 모든 일을 위임합니다. `loadScript`의 콜백은 스크립트 로딩 상태에 따라 `이행` 혹은 `거부`상태의 프라미스를 반환합니다. | ||
| 예시에서 볼 수 있듯이, `loadScriptPromise`는 기존 함수 `loadScript`에 모든 일을 위임합니다. `loadScript`의 콜백은 스크립트 로딩 상태에 따라 `이행` 혹은 `거부`상태의 프라미스를 반환합니다. | ||
|
|
||
| 그런데 실무에선 함수 하나가 아닌 여러 개의 함수를 프라미스화 해야 할 겁니다. 헬퍼 함수를 만드는 게 좋을 것 같네요. 프라미스화를 적용 할 함수 `f`를 받고 래퍼 함수를 반환하는 함수 `promisify(f)`를 만들어봅시다. | ||
|
|
||
|
|
@@ -68,21 +49,6 @@ function promisify(f) { | |
| return function (...args) { // 래퍼 함수를 반환함 | ||
| return new Promise((resolve, reject) => { | ||
| function callback(err, result) { // f에 사용할 커스텀 콜백 | ||
| ======= | ||
| As we can see, the new function is a wrapper around the original `loadScript` function. It calls it providing its own callback that translates to promise `resolve/reject`. | ||
|
|
||
| Now `loadScriptPromise` fits well in promise-based code. If we like promises more than callbacks (and soon we'll see more reasons for that), then we will use it instead. | ||
|
|
||
| In practice we may need to promisify more than one function, so it makes sense to use a helper. | ||
|
|
||
| We'll call it `promisify(f)`: it accepts a to-promisify function `f` and returns a wrapper function. | ||
|
|
||
| ```js | ||
| function promisify(f) { | ||
| return function (...args) { // return a wrapper-function (*) | ||
| return new Promise((resolve, reject) => { | ||
| function callback(err, result) { // our custom callback for f (**) | ||
| >>>>>>> upstream/master | ||
| if (err) { | ||
| reject(err); | ||
| } else { | ||
|
|
@@ -102,26 +68,11 @@ let loadScriptPromise = promisify(loadScript); | |
| loadScriptPromise(...).then(...); | ||
| ``` | ||
|
|
||
| <<<<<<< HEAD | ||
| 위 예시는 프라미스화 할 함수가 인수가 두 개(`(err, result)`)인 콜백을 받을 것이라 가정하고 작성되었습니다. 십중팔구 이런 상황일 것이고, 커스텀 콜백은 이 상황에 딱 들어맞습니다. `promisify`가 잘 동작하는 것은 말할 것도 없겠죠. | ||
| ======= | ||
| The code may look a bit complex, but it's essentially the same that we wrote above, while promisifying `loadScript` function. | ||
|
|
||
| A call to `promisify(f)` returns a wrapper around `f` `(*)`. That wrapper returns a promise and forwards the call to the original `f`, tracking the result in the custom callback `(**)`. | ||
|
|
||
| Here, `promisify` assumes that the original function expects a callback with exactly two arguments `(err, result)`. That's what we encounter most often. Then our custom callback is in exactly the right format, and `promisify` works great for such a case. | ||
| >>>>>>> upstream/master | ||
|
Comment on lines
-105
to
-113
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 부분도 다시 번역해야 할 것 같습니다. 기존에는 "위 예시는..."으로 시작했는데, 현재 원문은 "The code may look..."으로 시작하도록 설명 구조가 바뀌었습니다. |
||
|
|
||
| 그런데 함수 `f`가 두 개를 초과하는 인수를 가진 콜백, `callback(err, res1, res2, ...)`을 받는다면 어떤 일이 발생할까요? | ||
|
|
||
| <<<<<<< HEAD | ||
| 이런 경우를 대비하여 좀 더 진화한 헬퍼 함수, `promisify`를 만들어 봅시다. 새롭게 만든 함수를 `promisify(f, true)`형태로 호출하면, 프라미스 결과는 콜백의 성공 케이스(`results`)를 담은 배열, `[res1, res2, ...]`이 됩니다. | ||
| ======= | ||
| We can improve our helper. Let's make a more advanced version of `promisify`. | ||
|
|
||
| - When called as `promisify(f)` it should work similar to the version above. | ||
| - When called as `promisify(f, true)`, it should return the promise that resolves with the array of callback results. That's exactly for callbacks with many arguments. | ||
| >>>>>>> upstream/master | ||
|
Comment on lines
118
to
-124
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 부분도 새 원문 기준으로 다시 번역해야 할 것 같습니다. 현재 번역에는 라는 설명이 들어가 있는데, 현재 영어 원문에는 직접적으로 등장하지 않는 내용입니다. |
||
|
|
||
| ```js | ||
| // 콜백의 성공 결과를 담은 배열을 얻게 해주는 promisify(f, true) | ||
|
|
@@ -149,22 +100,12 @@ f = promisify(f, true); | |
| f(...).then(arrayOfResults => ..., err => ...); | ||
| ``` | ||
|
|
||
| <<<<<<< HEAD | ||
| `callback(result)`같이 `err`이 없는 형태나 지금까지 언급하지 않은 형태의 이색적인 콜백도 있을 수 있는데, 이런 경우엔 헬퍼 함수를 사용하지 않고 직접 프라미스화 하면 됩니다. | ||
| ======= | ||
| As you can see it's essentially the same as above, but `resolve` is called with only one or all arguments depending on whether `manyArgs` is truthy. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 현재 원문에 추가된 문장인데 번역에는 반영되지 않은 것 같습니다. |
||
|
|
||
| For more exotic callback formats, like those without `err` at all: `callback(result)`, we can promisify such functions manually without using the helper. | ||
| >>>>>>> upstream/master | ||
|
|
||
| 본 챕터에서 설명한 헬퍼 함수보다 더 유용한 형태의 프라미스화를 도와주는 함수를 제공하는 모듈도 많습니다. [es6-promisify](https://github.com/digitaldesignlabs/es6-promisify)가 대표적인 예입니다. Node.js에선 내장 함수 `util.promisify`를 사용해 프라미스화를 할 수 있습니다. | ||
|
|
||
| ```smart | ||
| <<<<<<< HEAD | ||
| 프라미스화는 곧 배우게 될 `async/await`와 함께 사용하면 더 좋습니다. 다만, 콜백을 완전히 대체하지는 못한다는 사실을 기억해 두시기 바랍니다. | ||
| ======= | ||
| Promisification is a great approach, especially when you use `async/await` (covered later in the chapter <info:async-await>), but not a total replacement for callbacks. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 문장도 번역이 누락된 것 같습니다. |
||
| >>>>>>> upstream/master | ||
|
|
||
| 프라미스는 하나의 결과만 가질 수 있지만, 콜백은 여러 번 호출할 수 있기 때문입니다. | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For better understanding, let's see an example.
원문 업데이트로 추가된 문장입니다. 기여 가이드의 "줄 바꿈과 단락은 원문 그대로 유지합니다" 규칙에 따라 번역 추가를 요청합니다.