I'm wondering if there's a way to determine if a function was defined using async function
or async (...) => ...
syntax?
I'm looking to implement the function isDefinedWithAsync
where:
isDefinedWithAsync(async function() { return null; }) === true;
isDefinedWithAsync(function() { return null; }) === false;
isDefinedWithAsync(async () => null) === true;
isDefinedWithAsync(() => null) === false;
Is it possible to implement isDefinedWithAsync
? And if so, how? Thanks!
Yes,
Straight from the TC39 async/await Issues:
function isAsync(fn) {
return fn.constructor.name === 'AsyncFunction';
}
Here's a snippet that checks your 2 async
samples above and a 3rd non-async function:
function isAsync(fn) {
return fn.constructor.name === 'AsyncFunction';
}
// async functions
const foo = async () => { }
async function bar () { }
// non-async function
function baz () { }
console.log(isAsync(foo)) // logs true
console.log(isAsync(bar)) // logs true
console.log(isAsync(baz)) // logs false
But as mentioned in the rest of the comments on that issue, you shouldn't differentiate, at least conceptually, between async function
s and Promise
s since they behave the same.
Both can be await
-ed/then
-ed in the exact same way. An async
marked function always implicitly returns a Promise
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With