Browse Source

Make js.Promise.then's fulfillCallback non-optional. Fix 4540. Fix 4808.

fulfillCallback is optional in the sense that it can be null, but it shouldn't be skipped.
Andy Li 9 years ago
parent
commit
2ff0b8534b

+ 1 - 1
std/js/Promise.hx

@@ -40,7 +40,7 @@ extern class Promise<T>
 	/** @throws DOMError */
 	function new( init : (T -> Void) -> (Dynamic -> Void) -> Void ) : Void;
 
-	function then<TOut>( ?fulfillCallback : PromiseCallback<T, TOut>, ?rejectCallback : EitherType<Dynamic -> Void, PromiseCallback<Dynamic, TOut>> ) : Promise<TOut>;
+	function then<TOut>( fulfillCallback : Null<PromiseCallback<T, TOut>>, ?rejectCallback : EitherType<Dynamic -> Void, PromiseCallback<Dynamic, TOut>> ) : Promise<TOut>;
 
 	@:native("catch")
 	function catchError<TOut>( rejectCallback : EitherType<Dynamic -> Void, PromiseCallback<Dynamic, TOut>> ) : Promise<TOut>;

+ 7 - 0
tests/misc/projects/Issue4540/Main.hx

@@ -0,0 +1,7 @@
+class Main {
+    static function main() {
+        js.Promise.resolve(0).then(function(c) test(c));
+    }
+
+    static function test(a:{test:String}) {}
+}

+ 2 - 0
tests/misc/projects/Issue4540/compile-fail.hxml

@@ -0,0 +1,2 @@
+-main Main
+-js Main.js

+ 4 - 0
tests/misc/projects/Issue4540/compile-fail.hxml.stderr

@@ -0,0 +1,4 @@
+Main.hx:3: characters 35-54 : c : { test : String } -> Void should be Null<js.PromiseCallback<Int, Void>>
+Main.hx:3: characters 35-54 : c : { test : String } -> Void should be js.PromiseCallback<Int, Void>
+Main.hx:3: characters 35-54 : c : { test : String } -> Void should be haxe.extern.EitherType<Int -> Void, Int -> js.Promise<Void>>
+Main.hx:3: characters 35-54 : For function argument 'fulfillCallback'