mirror of
https://github.com/hanzoai/core-js.git
synced 2026-09-24 16:58:15 +00:00
fix arguments length in %AsyncFromSyncIterator% methods callbacks
This commit is contained in:
@@ -41,27 +41,30 @@ var AsyncFromSyncIterator = function AsyncIterator(iteratorRecord) {
|
||||
AsyncFromSyncIterator.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
|
||||
next: function next() {
|
||||
var state = getInternalState(this);
|
||||
var value = arguments.length > 0 ? arguments[0] : undefined;
|
||||
var hasValue = arguments.length > 0;
|
||||
var value = hasValue ? arguments[0] : undefined;
|
||||
return new Promise(function (resolve, reject) {
|
||||
var result = anObject(call(state.next, state.iterator, value));
|
||||
var result = anObject(hasValue ? call(state.next, state.iterator, value) : call(state.next, state.iterator));
|
||||
asyncFromSyncIteratorContinuation(result, resolve, reject, state.iterator, true);
|
||||
});
|
||||
},
|
||||
'return': function () {
|
||||
var state = getInternalState(this);
|
||||
var iterator = state.iterator;
|
||||
var value = arguments.length > 0 ? arguments[0] : undefined;
|
||||
var hasValue = arguments.length > 0;
|
||||
var value = hasValue ? arguments[0] : undefined;
|
||||
return new Promise(function (resolve, reject) {
|
||||
var $return = getMethod(iterator, 'return');
|
||||
if ($return === undefined) return resolve(createIterResultObject(value, true));
|
||||
var result = anObject(call($return, iterator, value));
|
||||
var result = anObject(hasValue ? call($return, iterator, value) : call($return, iterator));
|
||||
asyncFromSyncIteratorContinuation(result, resolve, reject, iterator);
|
||||
});
|
||||
},
|
||||
'throw': function () {
|
||||
var state = getInternalState(this);
|
||||
var iterator = state.iterator;
|
||||
var value = arguments.length > 0 ? arguments[0] : undefined;
|
||||
var hasValue = arguments.length > 0;
|
||||
var value = hasValue ? arguments[0] : undefined;
|
||||
return new Promise(function (resolve, reject) {
|
||||
var $throw = getMethod(iterator, 'throw');
|
||||
if ($throw === undefined) {
|
||||
@@ -72,7 +75,7 @@ AsyncFromSyncIterator.prototype = defineBuiltIns(create(AsyncIteratorPrototype),
|
||||
}
|
||||
return reject(new TypeError('The iterator does not provide a throw method'));
|
||||
}
|
||||
var result = anObject(call($throw, iterator, value));
|
||||
var result = anObject(hasValue ? call($throw, iterator, value) : call($throw, iterator));
|
||||
asyncFromSyncIteratorContinuation(result, resolve, reject, iterator, true);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -32,6 +32,28 @@ QUnit.test('AsyncIterator#take', assert => {
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('AsyncIterator#take, return() does not pass extra argument', assert => {
|
||||
assert.expect(2);
|
||||
const async = assert.async();
|
||||
|
||||
let returnArgs;
|
||||
const iter = {
|
||||
i: 0,
|
||||
next() { return { value: ++this.i, done: false }; },
|
||||
return(...args) { returnArgs = args; return { value: undefined, done: true }; },
|
||||
[Symbol.iterator]() { return this; },
|
||||
};
|
||||
|
||||
AsyncIterator.from(iter).take(1).toArray().then(() => {
|
||||
assert.same(returnArgs.length, 0, 'return() called with no arguments');
|
||||
assert.true(true, 'take completes successfully');
|
||||
async();
|
||||
}).catch(() => {
|
||||
assert.avoid();
|
||||
async();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('AsyncIterator#take, return() result validated as object', assert => {
|
||||
assert.expect(1);
|
||||
const async = assert.async();
|
||||
|
||||
@@ -33,6 +33,28 @@ QUnit.test('AsyncIterator#take', assert => {
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('AsyncIterator#take, return() does not pass extra argument', assert => {
|
||||
assert.expect(2);
|
||||
const async = assert.async();
|
||||
|
||||
let returnArgs;
|
||||
const iter = {
|
||||
i: 0,
|
||||
next() { return { value: ++this.i, done: false }; },
|
||||
return(...args) { returnArgs = args; return { value: undefined, done: true }; },
|
||||
[Symbol.iterator]() { return this; },
|
||||
};
|
||||
|
||||
AsyncIterator.from(iter).take(1).toArray().then(() => {
|
||||
assert.same(returnArgs.length, 0, 'return() called with no arguments');
|
||||
assert.true(true, 'take completes successfully');
|
||||
async();
|
||||
}).catch(() => {
|
||||
assert.avoid();
|
||||
async();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('AsyncIterator#take, return() result validated as object', assert => {
|
||||
assert.expect(1);
|
||||
const async = assert.async();
|
||||
|
||||
Reference in New Issue
Block a user