diff --git a/lib/index.js b/lib/index.js index 7c21a89..3b701f7 100644 --- a/lib/index.js +++ b/lib/index.js @@ -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.`)); diff --git a/test/index.js b/test/index.js index 49cff1c..1902fc8 100644 --- a/test/index.js +++ b/test/index.js @@ -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`);