Skip to content
← Back to rules

promise/no-return-wrap 스타일

An auto-fix is available for this rule.

작동 방식

Promise.resolve 또는 Promise.reject로 반환값을 프로미스로 불필요하게 감싸는 것을 방지합니다.

이 규칙은 다음 두 가지 입장(제안)을 강제합니다:

  1. 프로미스를 해결해야 할 경우, Promise.resolve(value)를 반환하는 대신 return value로 원시 값을 직접 반환하는 것이 더 낫습니다.

  2. 프로미스를 거부해야 할 경우, Promise.reject(error)를 반환하는 대신 throw error로 원시 에러 값을 직접 던지는 것이 더 바람직합니다.

2번의 강제 적용을 끄는 옵션이 존재하며, 아래의 옵션 섹션을 참조하세요.

왜 문제가 될까?

thencatch 콜백의 반환문에서 원시 값을 프로미스로 변환하기 위해 Promise.resolvePromise.reject를 사용하는 것은 불필요합니다. 성공 케이스에서는 원시 값을 그대로 반환하고, 실패 케이스에서는 원시 에러 값을 직접 던지는 것으로 동일한 효과를 얻을 수 있기 때문입니다. 그래서 일부는 Promise.resolve(1)이나 Promise.reject(err)과 같은 값 반환 방식을 문법적 소음(불필요한 코드)이라고 생각합니다.

예시

이 규칙에 맞지 않는 잘못된 코드 예시:

js
myPromise().then(() => Promise.resolve(4));
myPromise().then(function () {
  return Promise.resolve(4);
});

myPromise().then(() => Promise.reject("err"));
myPromise().then(function () {
  return Promise.reject("err");
});
js
myPromise().catch(function () {
  return Promise.reject("err");
});
js
myPromise().finally(function () {
  return Promise.reject("err");
});
js
myPromise().finally(() => Promise.resolve(4));

이 규칙에 맞는 올바른 코드 예시:

js
myPromise().then(() => 4);
myPromise().then(function () {
  return 4;
});

myPromise().then(() => throw "err");
myPromise().then(function () {
  throw "err";
});
js
myPromise().catch(function () {
  throw "err";
});
js
myPromise().finally(() => 4);

구성

이 규칙은 다음 속성을 가진 구성 객체를 받습니다:

allowReject

type: boolean

기본값: false

allowReject는 프로미스 핸들러 내부에서 Promise.reject를 반환하도록 허용합니다.

allowRejecttrue로 설정되면 다음은 올바른 코드의 예시입니다:

js
myPromise().then(function () {
  return Promise.reject(0);
});
js
myPromise()
  .then()
  .catch(() => Promise.reject("err"));

사용 방법

설정 파일 또는 명령줄 인터페이스에서 이 규칙을 활성화하려면 다음과 같이 사용할 수 있습니다:

json
{
  "plugins": ["promise"],
  "rules": {
    "promise/no-return-wrap": "error"
  }
}
bash
oxlint --deny promise/no-return-wrap --promise-plugin

참고 자료