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()
인스턴스 메서드
.then
은 StatefulPromise
가 성공하거나 실패할 경우의 콜백 함수를 받아 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
객체를 반환합니다.