diff --git a/Tests/Promise_NonGeneric_Tests.cs b/Tests/Promise_NonGeneric_Tests.cs index 7cd07e9..759cb88 100644 --- a/Tests/Promise_NonGeneric_Tests.cs +++ b/Tests/Promise_NonGeneric_Tests.cs @@ -1295,5 +1295,48 @@ public void can_chain_promise_after_ContinueWith() Assert.Equal(2, callback); } + + [Fact] + public void can_create_promise() + { + int callback = 0; + + IPromise Create() => Promise.Create((resolve, reject) => + { + resolve(); + ++callback; + }); + + var promise = new Promise(); + promise.Then(Create); + promise.Resolve(); + + Assert.Equal(1, callback); + } + + [Fact] + public void can_create_oft_promise() + { + int callback = 0; + + IPromise Create() => Promise.Create((resolve, reject) => + { + resolve(1); + ++callback; + }); + + var promise = new Promise(); + promise.Then(Create); + promise.Resolve(); + + Assert.Equal(1, callback); + } + + [Fact] + public void can_create_null_throws() + { + Assert.Throws(() => Promise.Create(null)); + Assert.Throws(() => Promise.Create(null)); + } } } diff --git a/src/Promise_NonGeneric.cs b/src/Promise_NonGeneric.cs index b10c6b6..5b82f8b 100644 --- a/src/Promise_NonGeneric.cs +++ b/src/Promise_NonGeneric.cs @@ -375,6 +375,22 @@ private Promise(PromiseState initialState) id = NextId(); } + /// + /// Create a new promise with no result. + /// + /// resolve action + /// the constructed promise + public static IPromise Create(Action> resolver) + => new Promise(resolver ?? throw new ArgumentNullException(nameof(resolver))); + + /// + /// Create a new promise with a result. + /// + /// resolve action + /// the constructed promise + public static IPromise Create(Action, Action> resolver) + => new Promise(resolver ?? throw new ArgumentNullException(nameof(resolver))); + /// /// Increments the ID counter and gives us the ID for the next promise. ///