Simplify handling of promises as values.

This commit is contained in:
David Braun 2018-10-22 15:59:06 -04:00
parent cdfb4655b5
commit 58fe68f1c4
No known key found for this signature in database
GPG key ID: 87EC41ADF710B7E2
2 changed files with 8 additions and 16 deletions

View file

@ -61,13 +61,8 @@ const Channel = function(length = 0) {
} else if (shift.cancelled) {
index.shift++;
} else {
if (`reason` in push) {
shift.reject(push.reason);
} else {
lastValue = push.value;
shift.resolve(lastValue);
}
lastValue = push.value;
shift.resolve(lastValue);
buffered = Math.max(0, buffered - 1);
index.push++;
index.shift++;
@ -323,9 +318,7 @@ const Channel = function(length = 0) {
// If value is a promise that rejects, catch it in case there hasn't
// been a matching shift yet in order to prevent an unhandledRejection
// error. Reject it again when there's a shift.
Promise.resolve(value).catch(reason => {
order.reason = reason;
});
Promise.resolve(value).catch(() => {});
if (closed) {
order.reject(new Error(`Can't push to closed channel.`));

View file

@ -455,13 +455,12 @@ describe(`Channel object`, function() {
it(`allows promises to be sent through a channel`, function() {
return new Promise(async (resolve, reject) => {
process.once(`unhandledRejection`, reject);
const channel = Channel();
const channel = Channel.of(
Promise.resolve(`resolved`),
new Promise((resolve, reject) => {
setImmediate(reject, new Error(`rejected`));
})
);
(async () => {
await channel.push(Promise.resolve(`resolved`));
await channel.push(Promise.reject(new Error(`rejected`)));
})();
assert.equal(await channel.shift(), `resolved`);