Skip to content

Commit fd48e98

Browse files
committed
Return the most recent {value, done} object from touchNext
1 parent b329d69 commit fd48e98

4 files changed

+38
-0
lines changed

src/cached_async_iterable.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,8 @@ export default class CachedAsyncIterable {
7979
seen.push(await iterator.next());
8080
}
8181
}
82+
// Return the last cached {value, done} object to allow the calling
83+
// code to decide if it needs to call touchNext again.
84+
return seen[seen.length - 1];
8285
}
8386
}

src/cached_sync_iterable.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,8 @@ export default class CachedSyncIterable {
4949
seen.push(iterator.next());
5050
}
5151
}
52+
// Return the last cached {value, done} object to allow the calling
53+
// code to decide if it needs to call touchNext again.
54+
return seen[seen.length - 1];
5255
}
5356
}

test/cached_async_iterable_test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,5 +241,21 @@ suite("CachedAsyncIterable", function() {
241241
}
242242
assert.deepEqual(values, [o1, o2]);
243243
});
244+
245+
test("returns the most recent {value, done} object", async function() {
246+
const iterable = new CachedAsyncIterable([o1, o2]);
247+
assert.deepEqual(
248+
await iterable.touchNext(),
249+
{value: o1, done: false});
250+
assert.deepEqual(
251+
await iterable.touchNext(),
252+
{value: o2, done: false});
253+
assert.deepEqual(
254+
await iterable.touchNext(),
255+
{value: undefined, done: true});
256+
assert.deepEqual(
257+
await iterable.touchNext(),
258+
{value: undefined, done: true});
259+
});
244260
});
245261
});

test/cached_sync_iterable_test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,5 +137,21 @@ suite("CachedSyncIterable", function() {
137137
iterable.touchNext();
138138
assert.deepEqual([...iterable], [o1, o2]);
139139
});
140+
141+
test("returns the most recent {value, done} object", function() {
142+
const iterable = new CachedSyncIterable([o1, o2]);
143+
assert.deepEqual(
144+
iterable.touchNext(),
145+
{value: o1, done: false});
146+
assert.deepEqual(
147+
iterable.touchNext(),
148+
{value: o2, done: false});
149+
assert.deepEqual(
150+
iterable.touchNext(),
151+
{value: undefined, done: true});
152+
assert.deepEqual(
153+
iterable.touchNext(),
154+
{value: undefined, done: true});
155+
});
140156
});
141157
});

0 commit comments

Comments
 (0)