thefrontside / effection

Structured concurrency and effects for JavaScript
https://frontside.com/effection
MIT License
592 stars 25 forks source link

🐛 Consume a task as an operation. #915

Closed cowboyd closed 1 month ago

cowboyd commented 1 month ago

Motivation

Tasks are supposed to be both operations and promises. However, I had forgotten to make the task consumaeble as an operation, and only a promise. However, because we were monkey-patching Promise.prototype, it was actually hiding the gap because everywher we needed to consume a task as an operation, it just used the promise as operation route.

Approach

I added back the operation functionality, but at the same time, I actually removed the monkey-patch of Promise.prototype for our test suite so that we are forced to follow the operation pathway explicitly. That way, we won't risk regressing back to non-functioning operation tasks. It does make the tests a little more verbose, but the added safety is worth it.