diff --git a/greenlet.js b/greenlet.js index 4d317e6..16f664a 100644 --- a/greenlet.js +++ b/greenlet.js @@ -16,8 +16,8 @@ export default function greenlet(asyncFunction) { /* global $$ */ // Invoking within then() captures exceptions in the supplied async function as rejections - Promise.resolve().then( - $$.bind.apply($$, e.data) + Promise.resolve(e.data[1]).then( + v => $$.apply($$, v) ).then( // success handler - callback(id, SUCCESS(0), result) // if `d` is transferable transfer zero-copy diff --git a/greenlet.test.js b/greenlet.test.js index ec850a5..2528a6c 100644 --- a/greenlet.test.js +++ b/greenlet.test.js @@ -14,6 +14,19 @@ describe('greenlet', () => { expect(ret).toEqual('foo: test'); }); + it('should forward arguments', async () => { + let foo = greenlet(function() { + return { + args: [].slice.call(arguments) + }; + }); + + let ret = await foo('a', 'b', 'c', { position: 4 }); + expect(ret).toEqual({ + args: ['a', 'b', 'c', { position: 4 }] + }); + }); + it('should invoke async functions', async () => { let bar = greenlet( a => new Promise( resolve => { resolve('bar: '+a);