Thanks to visit codestin.com
Credit goes to github.com

Skip to content

inspect-js/is-async-function

 
 

Repository files navigation

is-async-function npm version mit license NPM monthly downloads npm total downloads

Is function really asynchronous function? Trying to guess that based on check if common-callback-names exists as function arguments names or you can pass your custom.

code style linux build code coverage dependency status paypal donate Buy me a Kofi

You might also be interested in always-done.

Table of Contents

(TOC generated by verb using markdown-toc)

Install

Install with npm

$ npm install is-async-function --save

or install using yarn

$ yarn add is-async-function

Usage

For more use-cases see the tests

const isAsyncFunction = require('is-async-function')

Important Note: It may fail, if the given function is using "default params" like options = { foo: 1 }. That limitation comes currently from the function-arguments package. It may or may not be fixed there in future.

For more advanced stuff, try parse-function which has couple of different versions and support for the mentioned problem and dozen of others. It uses real parser to parse given function and returns very useful information. PRs replacing the current logic with parse-function are not acceptable - this is that way intentionally. And was for old times of Node.js!

API

Trying to guess is fn asynchronous function or not. But not is-callback-function be aware of that diff.

Params

  • fn {Function}: is this fn a callback function
  • names {Array}: arguments names, default are common-callback-names
  • strict {Boolean}: defaults to true to always return a boolean, pass false to get index (position) - this is useful when you wanna understand which "callback name" exists as argument in that fn
  • returns {Boolean|Number}: always boolean true or false when on strict mode, othewise it can be Number index representing the position and if index is 0 it is transformed to boolean true - so always positive value if function is async.

Example

var fs = require('fs')
var isAsyncFn = require('is-async-function')

console.log(isAsyncFunction(fs.readFile)) // => true
console.log(isAsyncFunction(fs.stat)) // => true

console.log(isAsyncFunction(fs.readFileSync)) // => false
console.log(isAsyncFunction(fs.statSync)) // => false

// or pass custom names to recognize as `async`
console.log(isAsyncFunction(fs.stat, ['cb'])) // => false
console.log(isAsyncFunction(fs.readFile, ['foo', 'bar']))
// => false, because fs.readFile uses `cb`

non-strict mode

passing false as second or third argument

var isAsyncFunction = require('is-async-function')

console.log(isAsyncFunction(fs.readFile, false)) // => 2
// => 2, because it callback argument is called `cb`
// and that's the third element in `common-callback-names` array

console.log(isAsyncFunction(fs.stat, false)) // => 1
// => 1, because it callback argument is called `callback_`
// and that's the second element in `common-callback-names` array

Side note: In previous nodejs versions it was called in a few different ways - cb_, callback_ and etc. That's why common-callback-names exists. As in v7 it seems everything now is called callback. So in most of the cases you will get boolean true always - both in strict and non-strict mode. In non-strict mode that will mean your function has argument called callback.

If you pass array of names as second argument, in non-strict mode you will get index of that array.

Example

var isAsyncFn = require('is-async-function')

// you considered you callback fucntion
// to be called `qux` for some reason
function myAsyncFn (foo, bar, qux) {
  qux(null, 123)
}

console.log(isAsyncFn(myAsyncFn)) // => false
console.log(isAsyncFn(myAsyncFn, false)) // => false

console.log(isAsyncFn(myAsyncFn, ['callback', 'qux'], false)) // => 1
// you are getting "1", because `qux` is second item
// in provided `names` array.

Related

  • always-done: Handle completion and errors with elegance! Support for streams, callbacks, promises, child processes, async/await and sync functions. A drop-in replacement… more | homepage
  • common-callback-names: List of common callback names - callback, cb, callback_, next, done. | homepage
  • fn-args: Get the arguments of a function, arrow function, generator function, async function | homepage
  • fn-name: Get the name of a named function | homepage
  • function-arguments: Get arguments of a function, useful for and used in dependency injectors. Works for regular functions, generator functions and arrow… more | homepage
  • get-fn-name: Get function name with strictness and correctness in mind. Also works for arrow functions and getting correct name of bounded… more | homepage
  • is-callback-function: Returns true if function is a callback. Checks its name is one of common-callback-names - callback, cb, cb_, callback_, next… more | homepage
  • minibase: Minimalist alternative for Base. Build complex APIs with small units called plugins. Works well with most of the already existing… more | homepage
  • parse-function: Parse a function into an object using espree, acorn or babylon parsers. Extensible through Smart Plugins | homepage
  • try-catch-core: Low-level package to handle completion and errors of sync or asynchronous functions, using once and dezalgo libs. Useful for and… more | homepage

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue. Please read the contributing guidelines for advice on opening issues, pull requests, and coding standards. If you need some help and can spent some cash, feel free to contact me at CodeMentor.io too.

In short: If you want to contribute to that project, please follow these things

  1. Please DO NOT edit README.md, CHANGELOG.md and .verb.md files. See "Building docs" section.
  2. Ensure anything is okey by installing the dependencies and run the tests. See "Running tests" section.
  3. Always use npm run commit to commit changes instead of git commit, because it is interactive and user-friendly. It uses commitizen behind the scenes, which follows Conventional Changelog idealogy.
  4. Do NOT bump the version in package.json. For that we use npm run release, which is standard-version and follows Conventional Changelog idealogy.

Thanks a lot! :)

Building docs

Documentation and that readme is generated using verb-generate-readme, which is a verb generator, so you need to install both of them and then run verb command like that

$ npm install verbose/verb#dev verb-generate-readme --global && verb

Please don't edit the README directly. Any changes to the readme must be made in .verb.md.

Running tests

Clone repository and run the following in that cloned directory

$ npm install && npm test

Author

Charlike Mike Reagent

License

Copyright © 2015, 2020, Charlike Mike Reagent. Released under the MIT License.


This file was generated by verb-generate-readme, v0.8.0, on January 15, 2020. Project scaffolded using charlike cli.