4 ms·
A function like this should not be something that anyone even thinks of writing or using. In properly designed languages, values have either a known concrete t
by devit 6y ago
A function like this should not be something that anyone even thinks of writing or using.
In properly designed languages, values have either a known concrete type, or the interfaces that they have to support are listed, and the compiler checks them.
Even in JavaScript/TypeScript, if you are using this, you or a library you are using are doing it wrong, since you should know whether a value is a promise or not when writing code.
- city41 6y agoThis function is most likely an artifact of before promises got standardized. One way promises took off and became so ubiquitous is different implementations could interop seamlessly. And the reason for that is a promise was defined as 'an object or function having a then method which returns a promise when called'. Doesn't excuse the JS ecosystem and JS as a whole, which truly is a mess. But there's a history behind these things.
- stefan_ 6y agoI think the point of the comment is: you should not be testing for this at all. If your API works with promises, call .then() on what is handed to you. That's it. Don't make up emergent, untestable behavior on the spot.
- city41 6y agoYou need to do this test if you are creating a promise implementation. That was my point, there is a reason code like this exists.
- earthboundkid 6y agoWhy would an implementation need to test for it? ISTM that a framework may need to test for promiseness if it calls promises and functions differently, but it can and should be done as a utility in the framework, not as a separate package.
- city41 6y agoI agree with that. I have no idea why it’s in a separate package. But I can say that about many packages :). It’s possible to just treat everything as a promise by wrapping results in Promise.resolve() but that can have performance implications that some franeworks might want to avoid by only going down the promise route when they have to. For promise implementations, If the callback to then() returns a promise, the promise implementation detects that and resolves that promise behind the scenes: http://www.mattgreer.org/articles/promises-in-wicked-detail/#returning-promises-inside-the-chain http://www.mattgreer.org/articles/promises-in-wicked-detail/...