Q: JavaScript에서 비동기 함수의 반환값은 무엇인가요?
A: JavaScript에서 `async` 키워드가 붙은 함수(비동기 함수)는 항상 `Promise` 객체를 반환합니다.
---
Q: 왜 `async` 함수는 항상 Promise를 반환하나요?
A: `async` 함수 내부에서는 `await` 구문을 사용하여 비동기 작업을 동기 실행처럼 처리할 수 있는데, 이 함수의 반환값을 `Promise`로 감싸 비동기 처리를 명확히 하기 위해서입니다. 따라서 함수가 명시적으로 값을 반환하더라도, 실제 반환값은 그 값을 해결(resolved)하는 `Promise`입니다.
---
Q: `async` 함수에서 `return` 문으로 값을 반환하면 결과가 어떻게 되나요?
A: `return value;` 구문은 `Promise`가 `value`를 성공적으로 해결(resolved)한 상태와 같습니다. 예를 들어:
```javascript
async function foo() {
return 42;
}
foo().then(result => console.log(result)); // 42 출력
```
---
Q: `async` 함수에서 에러를 발생시키면 어떻게 되나요?
A: 함수 내부에서 예외가 발생하면 자동으로 `reject` 상태의 `Promise`를 반환합니다. 예를 들어:
```javascript
async function bar() {
throw new Error("오류 발생");
}
bar().catch(error => console.log(error.message)); // "오류 발생" 출력
```
---
Q: `async` 함수를 `await` 없이 호출하면 반환값은 무엇인가요?
A: `async` 함수는 항상 `Promise`를 반환하므로, `await` 없이 호출하면 즉시 `Promise` 객체를 받게 됩니다. `Promise` 객체를 직접 사용하거나 `.then()`, `.catch()`, 또는 `await`로 처리해야 실제 결과 값을 얻을 수 있습니다.
---
Q: 요약하자면, `async` 함수 반환값에 대해 알아야 할 핵심은 무엇인가요?
- `async` 함수는 항상 `Promise`를 반환한다.
- `return` 값은 `Promise`가 성공적으로 해결하는 결과가 된다.
- 예외가 발생하면 `Promise`가 거부(rejected)된다.
- 반환된 `Promise`를 통해 비동기 작업 결과를 다룰 수 있다.
---
이상으로 JavaScript 비동기 함수 반환값에 관한 설명입니다.
JavaScript에서 비동기 함수의 반환값은 `Promise` 객체입니다. 비동기 함수는 `async` 키워드로 정의되며, 이 함수 내에서 `await` 키워드를 사용하여 비동기 작업의 완료를 기다릴 수 있습니다. 비동기 함수의 주요 목적은 비동기 작업을 보다 간편하게 처리하고, 코드의 가독성을 높이는 것입니다. 비동기 함수의 정의 비동기 함수는 다음과 같이 정의됩니다: ```javascript async function myAsyncFunction() { // 비동기 작업 } ``` 이 함수는 호출될 때 항상 `Promise`를 반환합니다. 만약 함수 내에서 명시적으로 `return` 문을 사용하여 값을 반환하면, 이 값은 자동으로 `Promise.resolve(value)`로 감싸져서 반환됩니다. 반대로, 함수 내에서 예외가 발생하면, 이 예외는 `Promise.reject(error)`로 변환되어 반환됩니다. 반환값의 예 다음은 비동기 함수의 반환값을 보여주는 간단한 예제입니다: ```javascript async function fetchData() { return "데이터를 성공적으로 가져왔습니다!"; } fetchData().then(result => { console.log(result); // "데이터를 성공적으로 가져왔습니다!" }); ``` 위의 예제에서 `fetchData` 함수는 문자열을 반환하지만, 실제로는 `Promise` 객체가 반환됩니다. 이 `Promise`는 성공적으로 해결되면 문자열을 결과로 제공합니다. await 키워드 `await` 키워드는 비동기 함수 내에서만 사용할 수 있으며, `Promise`가 해결될 때까지 코드 실행을 일시 <a href='https://sangseek.com/sangseeks/중지/ko'>중지</a>합니다. `await`를 사용하면 비동기 작업의 결과를 동기적으로 처리할 수 있습니다. ```javascript async function getData() { const data = await fetchData(); // fetchData()의 Promise가 해결될 때까지 대기 console.log(data); // "데이터를 성공적으로 가져왔습니다!" } ``` 예외 처리 비동기 함수 내에서 발생하는 예외는 `try...catch` 블록을 사용하여 처리할 수 있습니다. 예외가 발생하면 `Promise`는 거부 상태로 전환됩니다. ```javascript async function <a href='https://sangseek.com/sangseeks/fetchDataWithError/ko'>fetchDataWithError</a>() { <a href='https://sangseek.com/sangseeks/throw/ko'>throw</a> new Error("데이터를 가져오는 중 오류 발생!"); } async function getDataWithErrorHandling() { try { const data = await fetchDataWithError(); } catch (error) { console.error(error.message); // "데이터를 가져오는 중 오류 발생!" } } getDataWithErrorHandling(); ``` 결론 JavaScript에서 비동기 함수는 항상 `Promise` 객체를 반환하며, 이는 비동기 작업의 결과를 처리하는 데 매우 유용합니다. `async`와 `await`를 사용하면 비동기 코드를 더 직관적이고 가독성이 높게 작성할 수 있으며, 예외 처리 또한 간편하게 수행할 수 있습니다. 이러한 특성 덕분에 비동기 프로그래밍이 더욱 쉬워지고, 복잡한 비동기 작업을 관리하는 데 큰 도움이 됩니다.