Skip to content

Commit

Permalink
[Bug] Version 0.1.1 does not support resolving a promise with a promi…
Browse files Browse the repository at this point in the history
…se properly. #18 (#19)
  • Loading branch information
nev21 authored Feb 13, 2023
1 parent 96db7e3 commit 4e62da4
Show file tree
Hide file tree
Showing 16 changed files with 774 additions and 209 deletions.
118 changes: 48 additions & 70 deletions common/config/rush/npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export {
} from "./promise/syncPromise";
export {
createIdlePromise, createIdleAllPromise, createIdleResolvedPromise, createIdleRejectedPromise,
setDetaultIdlePromiseTimeout as setDetaultIdleTimeout
setDetaultIdleTimeout
} from "./promise/idlePromise";
export {
createAsyncPromise, createAsyncAllPromise, createAsyncResolvedPromise, createAsyncRejectedPromise
Expand Down
7 changes: 4 additions & 3 deletions lib/src/internal/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@
*/
export const enum ePromiseState {
Pending = 0,
Resolved = 1,
Rejected = 2
Resolving = 1,
Resolved = 2,
Rejected = 3
}

/**
* @ignore -- Don't include in the generated documentation
* @internal
*/
export const STRING_STATES: string[] = [
"pending", "resolved", "rejected"
"pending", "resolving", "resolved", "rejected"
];
18 changes: 9 additions & 9 deletions lib/src/promise/await.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@ import { FinallyPromiseHandler, RejectedPromiseHandler, ResolvedPromiseHandler }
* @param value - The value or promise like value to wait for
* @param cb - The callback to call with the response of the promise as an IAwaitResponse object.
*/
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | Promise<T>, cb: (response: AwaitResponse<T>) => void): Promise<T | TResult1 | TResult2>;
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | PromiseLike<T>, cb: (response: AwaitResponse<T>) => void): PromiseLike<T | TResult1 | TResult2>;
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | IPromise<T>, cb: (response: AwaitResponse<T>) => void): IPromise<T | TResult1 | TResult2> {
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | Promise<T>, cb: (response: AwaitResponse<T>) => void): T | Promise<T | TResult1 | TResult2>;
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | PromiseLike<T>, cb: (response: AwaitResponse<T>) => void): T | PromiseLike<T | TResult1 | TResult2>;
export function doAwaitResponse<T, TResult1 = T, TResult2 = never>(value: T | IPromise<T>, cb: (response: AwaitResponse<T>) => void): T | IPromise<T | TResult1 | TResult2> {
return doAwait(value as any, (value) => {
cb({
cb && cb({
value: value,
rejected: false
});
},
(reason) => {
cb({
cb && cb({
rejected: true,
reason: reason
});
Expand Down Expand Up @@ -63,17 +63,17 @@ export function doAwait<T, TResult1 = T, TResult2 = never>(value: T | PromiseLik
*/
export function doAwait<T, TResult1 = T, TResult2 = never>(value: T | IPromise<T>, resolveFn: ResolvedPromiseHandler<T, TResult1>, rejectFn?: RejectedPromiseHandler<TResult2>, finallyFn?: FinallyPromiseHandler): T | IPromise<T | TResult1 | TResult2> {
let result = value;
let chainedPromise = value;

if (isPromiseLike<T>(value)) {
if (resolveFn || rejectFn) {
chainedPromise = value.then(resolveFn, rejectFn) as any;
result = value.then(resolveFn, rejectFn) as any;
}
} else {
resolveFn(value as T);
resolveFn && resolveFn(value as T);
}

if (finallyFn) {
result = doFinally(chainedPromise as any, finallyFn);
result = doFinally(result as any, finallyFn);
}

return result as any;
Expand Down
Loading

0 comments on commit 4e62da4

Please sign in to comment.