Index: src/js/harmony-async-await.js |
diff --git a/src/js/harmony-async-await.js b/src/js/harmony-async-await.js |
index c6705efe36d027134dc4cbf09003d27e107fe0d4..4f8e71c7dda01c177b5b134d8cf47e81cb4155ed 100644 |
--- a/src/js/harmony-async-await.js |
+++ b/src/js/harmony-async-await.js |
@@ -13,29 +13,35 @@ |
var AsyncFunctionNext; |
var AsyncFunctionThrow; |
-var PromiseReject; |
-var PromiseResolve; |
-var PromiseThen; |
+var GlobalPromise; |
+var NewPromiseCapability; |
+var PerformPromiseThen; |
utils.Import(function(from) { |
AsyncFunctionNext = from.AsyncFunctionNext; |
AsyncFunctionThrow = from.AsyncFunctionThrow; |
- PromiseReject = from.PromiseCreateRejected; |
- PromiseResolve = from.PromiseCreateResolved; |
- PromiseThen = from.PromiseThen; |
+ GlobalPromise = from.GlobalPromise; |
+ NewPromiseCapability = from.NewPromiseCapability; |
+ PerformPromiseThen = from.PerformPromiseThen; |
}); |
// ------------------------------------------------------------------- |
function AsyncFunctionAwait(generator, value) { |
- return %_Call( |
- PromiseThen, PromiseResolve(value), |
- function(sentValue) { |
- return %_Call(AsyncFunctionNext, generator, sentValue); |
- }, |
- function(sentError) { |
- return %_Call(AsyncFunctionThrow, generator, sentError); |
- }); |
+ // Promise.resolve(value).then( |
+ // value => AsyncFunctionNext(value), |
+ // error => AsyncFunctionThrow(error) |
+ // ); |
+ var promiseCapability = NewPromiseCapability(GlobalPromise); |
+ var resolveResult = %_Call(promiseCapability.resolve, UNDEFINED, value); |
+ var onFulfilled = |
+ (sentValue) => %_Call(AsyncFunctionNext, generator, sentValue); |
+ var onRejected = |
+ (sentError) => %_Call(AsyncFunctionThrow, generator, sentError); |
+ |
+ var throwawayCapability = NewPromiseCapability(GlobalPromise); |
Dan Ehrenberg
2016/08/02 20:20:56
I'm a big fan of how this exactly mirrors the spec
caitp
2016/08/02 20:40:20
I assume that's meant to be "I'm not a big fan of
Dan Ehrenberg
2016/08/02 20:54:45
Yeah, this does seem tricky. I definitely didn't m
|
+ return PerformPromiseThen(promiseCapability.promise, onFulfilled, onRejected, |
+ throwawayCapability); |
} |
%InstallToContext([ "async_function_await", AsyncFunctionAwait ]); |