{"id":20626693,"url":"https://github.com/dimensionsoftware/optional-callback","last_synced_at":"2025-04-15T15:21:35.871Z","repository":{"id":57315863,"uuid":"69055147","full_name":"DimensionSoftware/optional-callback","owner":"DimensionSoftware","description":"Allow Promise-returning functions to also take callbacks","archived":false,"fork":false,"pushed_at":"2016-10-26T00:23:10.000Z","size":21,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-13T17:51:56.324Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DimensionSoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-23T19:35:21.000Z","updated_at":"2017-06-10T15:21:00.000Z","dependencies_parsed_at":"2022-08-25T20:40:39.644Z","dependency_job_id":null,"html_url":"https://github.com/DimensionSoftware/optional-callback","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionSoftware%2Foptional-callback","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionSoftware%2Foptional-callback/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionSoftware%2Foptional-callback/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DimensionSoftware%2Foptional-callback/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DimensionSoftware","download_url":"https://codeload.github.com/DimensionSoftware/optional-callback/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249094980,"owners_count":21211842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T13:14:26.384Z","updated_at":"2025-04-15T15:21:35.850Z","avatar_url":"https://github.com/DimensionSoftware.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# optional-callback(fn) : Function\n\n[![npm version](https://badge.fury.io/js/optional-callback.svg)](https://badge.fury.io/js/optional-callback)\n[![Build Status](https://travis-ci.org/DimensionSoftware/optional-callback.svg?branch=master)](https://travis-ci.org/DimensionSoftware/optional-callback)\n[![Documentation Status](https://readthedocs.org/projects/optional-callback/badge/?version=latest)](http://optional-callback.readthedocs.io/en/latest/?badge=latest)\n\n\nA function that turns a Promise-returning function into a function that may also take an optional callback as the last parameter instead\n\n## Install\n\n```sh\nnpm install --save optional-callback\n```\n\n## Example\n\n```javascript\nvar Promise = require('bluebird');\nvar oc = require('optional-callback');\n\n/* This is a simple function that returns a Promise that will resolve after\n   the time specified in `delay` passes.\n\n   @param {Number} delay        milliseconds to wait\n   @return {Promise}            a Promise that will resolve after the `delay` milliseconds passes\n*/\nfunction foo(delay) {\n  return Promise.delay(delay);\n}\n\n/* This function works just like `foo`, but it can also take an optional callback.\n\n   @param {Number} delay        milliseconds to wait\n   @param {Function} cb         (optional) if provided, the callback will be run after the `delay` expires\n   @return {Promise?}           If `cb` is not passed, a Promise will be returned.\n                                Otherwise, nothing will be returned.\n*/\nvar foo2 = oc(foo);\n\n// foo2 can work just like the original foo with Promises\nfoo2(1000).then(function() {\n  console.log('done');\n}).catch(function(err){\n  console.warn(err);\n});\n\n// foo2 may also be called with a callback\nfoo2(1000, function(err){\n  if (err) return console.warn(err);\n  console.log('done');\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimensionsoftware%2Foptional-callback","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimensionsoftware%2Foptional-callback","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimensionsoftware%2Foptional-callback/lists"}