I have some code that returns a promise object, e.g. using Q library for NodeJS.
var Q = require('q'); /** * @returns ??? */ function task(err) { return err? Q.reject(new Error('Some error')) : Q.resolve('Some result'); }
How to document such a return value using JSDoc?
Here is an example of a promise that will be resolved ( fulfilled state) with the value I am done immediately. let promise = new Promise(function(resolve, reject) { resolve("I am done"); }); The promise below will be rejected ( rejected state) with the error message Something is not right! .
Promise.reject(reason) Returns a new Promise object that is rejected with the given reason. Promise.resolve(value) Returns a new Promise object that is resolved with the given value.
The Promise. resolve() method "resolves" a given value to a Promise . If the value is a promise, that promise is returned; if the value is a thenable, Promise. resolve() will call the then() method with two callbacks it prepared; otherwise the returned promise will be fulfilled with the value.
Promise resolve() method:If the value is a promise then promise is returned. If the value has a “then” attached to the promise, then the returned promise will follow that “then” to till the final state. The promise fulfilled with its value will be returned.
Even if they don't exist in Javascript, I found that JSdoc understands "generic types".
So you can define your custom types and then use /* @return Promise<MyType> */
. The following result in a nice TokenConsume(token) → {Promise.<Token>} with a link to your custom Token
type in the doc.
/** * @typedef Token * @property {bool} valid True if the token is valid. * @property {string} id The user id bound to the token. */ /** * Consume a token * @param {string} token [description] * @return {Promise<Token>} A promise to the token. */ TokenConsume = function (string) { // bla bla }
It even works with /* @return Promise<MyType|Error> */
or /* @return Promise<MyType, Error> */
.
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