컨텐츠로 건너뛰기

StatefulPromise

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

import

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

.constructor()

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

인수

executor

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

반환값

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

예제

해결

다음 예제에서는 StatefulPromise가 해결될 때까지 대기하고 그 결과를 받습니다.

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

다음 예제에서는 StatefulPromise가 거부될 때까지 대기하고, 처리하면 오류를 던질 것으로 예상합니다.

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가 호출되면) unhandledrejection이 발생하지만, StatefulPromise는 명시적으로 처리할 때까지 오류를 던지지 않는다는 것을 알 수 있습니다.

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

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

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

.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는 주어진 값으로 해결된 StatefulPromise를 반환합니다.

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

인수

value

해결할 값입니다. 기본값은 undefined입니다.

반환값

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

.reject() 정적 메서드

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

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

인수

reason

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

반환값

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

.withResolvers() 정적 메서드

.withResolvers는 새로운 StatefulPromise 객체와, 그것을 해결하거나 거부하는 함수를 포함하는 객체를 반환하는 함수입니다.

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

인수

없음.

반환값

다음 속성을 포함하는 일반 객체입니다.

promise

새로운 StatefulPromise 객체입니다.

resolve

promise를 해결하는 함수입니다.

reject

promise를 거부하는 함수입니다.

.try() 정적 메서드

.try는 함수를 StatefulPromise로 래핑하는 함수입니다.

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

인수

func

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

반환값

  • func가 동기적으로 값을 반환하는 경우, 해결된 상태의 StatefulPromise를 반환합니다.
  • func가 동기적으로 오류를 던지는 경우, 거부된 상태의 StatefulPromise를 반환합니다.
  • func가 비동기적으로 해결 또는 거부되는 경우, 보류 상태의 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는 거부된 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 객체가 거부한 이유의 배열로 해결된 StatefulPromise 객체를 반환합니다.