컨텐츠로 건너뛰기

StatefulPromise

StatefulPromise는 처리되지 않은 상태로 거부되어도 에러를 던지지 않는 PromiseLike를 구현하는 클래스입니다.

import

import { StatefulPromise } from "@tai-kun/surrealdb/utils";

.constructor()

new StatefulPromise<T>(executor: StatefulPromiseExecutor<T>);

인수

executor

StatefulPromise에 대해 Promise() 생성자의 executor와 동일한 역할을 합니다.

반환값

new를 통해 호출될 경우, StatefulPromise는 해당 인스턴스를 반환합니다.

예시

resolve

다음 예시는 StatefulPromise가 resolve될 때까지 대기하고, 그 결과를 받는 방법을 보여줍니다:

import { StatefulPromise } from "@tai-kun/surrealdb/utils";
const promise = new StatefulPromise(resolve => {
setTimeout(() => resolve("test"), 0);
});
const result = await promise;
console.log(result); // "test"
reject

다음 예시는 StatefulPromise가 reject될 때까지 대기하고, 처리하면 에러를 던지는 것을 확인합니다:

const promise = new StatefulPromise((_, reject) => {
setTimeout(() => reject("test"), 0);
});
while (promise.state === "pending") {
await new Promise(r => setTimeout(r, 50));
}
try {
await promise;
} catch (e) {
console.log(e); // "test"
}

일반적인 Promise는 처리되지 않은 상태로 reject(즉, reject가 호출)되면 unhandledrejection 이벤트가 발생하지만, StatefulPromise는 명시적으로 처리할 때까지 에러를 던지지 않는 것을 알 수 있습니다.

.state 인스턴스 속성 읽기 전용

현재 StatefulPromise의 상태를 나타냅니다. 상태는 다음 세 가지가 있습니다.

  • pending: 보류 중임을 나타냅니다. 아직 resolve도 reject도 되지 않았습니다.
  • fulfilled: resolve되었음을 나타냅니다.
  • rejected: reject되었음을 나타냅니다.

.then() 인스턴스 메서드

.thenStatefulPromise가 성공하거나 실패할 경우의 콜백 함수를 받아 StatefulPromise 객체를 반환합니다.

then<R1, R2>(
onFulfilled?: ((value: any) => R1 | PromiseLike<R1>) | undefined | null,
onRejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | undefined | null,
): StatefulPromise<R1 | R2>;

인수

Promise.prototype.then과 동일합니다.

반환값

StatefulPromise 객체를 반환합니다.

.resolve() 정적 메서드

.resolve는 주어진 값으로 resolve된 StatefulPromise를 반환합니다.

resolve<T>(value?: T | PromiseLike<T>): StatefulPromise<Awaited<T>>;

인수

value

resolve할 값입니다. 기본값은 undefined입니다.

반환값

인수 value로 resolve된 StatefulPromise 객체를 반환합니다. 값이 StatefulPromise 객체이면 해당 값을 반환합니다.

.reject() 정적 메서드

.reject는 주어진 이유로 reject된 StatefulPromise 객체를 반환합니다.

reject<T>(reason?: unknown): StatefulPromise<T>;

인수

reason

reject할 이유입니다. 기본값은 undefined입니다.

반환값

인수 reason으로 reject된 StatefulPromise를 반환합니다.

.withResolvers() 정적 메서드

.withResolvers는 새로운 StatefulPromise 객체와, 그것을 resolve 또는 reject하는 함수를 포함하는 객체를 반환하는 함수입니다.

withResolvers<T>(): {
promise: StatefulPromise<T>;
resolve: (value: T | PromiseLike<T>) => void;
reject: (reason: unknown) => void;
};

인수

없음.

반환값

다음과 같은 속성을 포함하는 플레인 객체입니다.

promise

새로운 StatefulPromise 객체입니다.

resolve

promise를 resolve하는 함수입니다.

reject

promise를 reject하는 함수입니다.

.try() 정적 메서드

.try는 함수를 StatefulPromise로 감싸는 함수입니다.

try<T, A extends readonly unknown[]>(
func: (...args: A) => T | PromiseLike<T>,
...args: A
): StatefulPromise<T>;

인수

func

호출될 함수입니다. 이 함수는 StatefulPromise 이외의 값을 반환할 수 있습니다. 또한 함수 내에서 동기적으로 에러를 던질 수도 있습니다.

반환값

  • func가 동기적으로 값을 반환하는 경우, resolve된 상태의 StatefulPromise를 반환합니다.
  • func가 동기적으로 에러를 던지는 경우, reject된 상태의 StatefulPromise를 반환합니다.
  • func가 비동기적으로 resolve 또는 reject되는 경우, pending 상태의 StatefulPromise를 반환합니다.

예시

다음 예시는 동기적으로 던져진 에러가 StatefulPromise에 의해 처리되는 것을 보여줍니다:

import { StatefulPromise } from "@tai-kun/surrealdb/utils";
const promise = StatefulPromise.try(() => {
throw "test";
});
await promise.then(null, e => {
console.log(e); // "test"
});

.allRejected() 정적 메서드

.allRejected는 reject된 StatefulPromise의 이유만을 수집하는 함수입니다.

allRejected(promises: Iterable<unknown>): StatefulPromise<unknown[]>;
allRejected<T>(
promises: Iterable<T>,
extract: (item: T) => unknown,
): StatefulPromise<unknown[]>;

인수

promises

반복 가능한 객체입니다. StatefulPromise 객체 이외의 것을 포함할 수 있지만, 그들은 에러로 판정되지 않습니다. 일반적인 Promise도 마찬가지로 무시됩니다.

extract

promises에서 StatefulPromise 객체를 추출하는 함수입니다.

반환값

StatefulPromise 객체가 reject한 이유의 배열로 resolve된 StatefulPromise 객체를 반환합니다.