- var state = getInternalState(this);
- if (state.done) return Promise.resolve({ done: true, value: undefined });
- try {
- return Promise.resolve(anObject(nextHandler.call(state, arg, Promise)));
- } catch (error) {
- return Promise.reject(error);
- }
+ var that = this;
+ var hasArgument = !!arguments.length;
+ return new Promise(function (resolve) {
+ var state = getInternalState(that);
+ var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined];
+ state.ignoreArgument = false;
+ resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise, args)));
+ });
+ },
+ 'return': function (value) {
+ var that = this;
+ return new Promise(function (resolve, reject) {
+ var state = getInternalState(that);
+ var iterator = state.iterator;
+ state.done = true;
+ var $$return = getMethod(iterator, 'return');
+ if ($$return === undefined) return resolve({ done: true, value: value });
+ Promise.resolve(call($$return, iterator, value)).then(function (result) {
+ anObject(result);
+ resolve({ done: true, value: value });
+ }, reject);
+ });