Consider also that a reader may be a proxy for a remote reader. A promise iterator be easily backed by a promise for a remote object.
function RemotePromiseIterator(promise) {
this.remoteIteratorPromise = promise.invoke("iterate");
}
RemotePromiseIterator.prototype.next = function (value) {
return this.remoteIteratorPromise.invoke("next");
};
var remoteReader = remoteFilesystem.invoke("open", "primes.txt");
var reader = new RemotePromiseIterator(remoteReader);
reader.forEach(console.log);
Apart from then
and done
, promises provide methods like get
, call
, and
invoke
to allow promises to be created from promises and for messages to be
pipelined to remote objects.
An iterate
method should be a part of that protocol to allow values to be
streamed on demand over any message channel.