Chromium Code Reviews| 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 ]); |