{"name":"q","version":"1.5.1","description":"A library for promises (CommonJS/Promises/A,B,D)","homepage":"https://github.com/kriskowal/q","author":{"name":"Kris Kowal","email":"kris@cixar.com","url":"https://github.com/kriskowal"},"keywords":["q","promise","promises","promises-a","promises-aplus","deferred","future","async","flow control","fluent","browser","node"],"contributors":[{"name":"Kris Kowal","email":"kris@cixar.com","url":"https://github.com/kriskowal"},{"name":"Irakli Gozalishvili","email":"rfobic@gmail.com","url":"http://jeditoolkit.com"},{"name":"Domenic Denicola","email":"domenic@domenicdenicola.com","url":"http://domenicdenicola.com"}],"bugs":{"url":"http://github.com/kriskowal/q/issues"},"license":"MIT","main":"q.js","files":["LICENSE","q.js","queue.js"],"repository":{"type":"git","url":"git://github.com/kriskowal/q.git"},"engines":{"node":">=0.6.0","teleport":">=0.2.0"},"dependencies":{},"devDependencies":{"cover":"*","grunt":"~0.4.1","grunt-cli":"~0.1.9","grunt-contrib-uglify":"~0.9.1","jasmine-node":"1.11.0","jshint":"~2.1.9","matcha":"~0.2.0","opener":"*","promises-aplus-tests":"1.x"},"scripts":{"test":"npm ls -s && jasmine-node spec && promises-aplus-tests spec/aplus-adapter && npm run -s lint","test-browser":"opener spec/q-spec.html","benchmark":"matcha","lint":"jshint q.js","cover":"cover run jasmine-node spec && cover report html && opener cover_html/index.html","minify":"grunt","prepublish":"grunt"},"overlay":{"teleport":{"dependencies":{"system":">=0.0.4"}}},"directories":{"test":"./spec"},"gitHead":"c2f5a6f35456389a806acca50bfd929cbe30c4cb","_id":"q@1.5.1","_shasum":"7e32f75b41381291d04611f1bf14109ac00651d7","_from":".","_npmVersion":"2.14.2","_nodeVersion":"0.10.32","_npmUser":{"name":"kriskowal","email":"kris.kowal@cixar.com"},"dist":{"shasum":"7e32f75b41381291d04611f1bf14109ac00651d7","tarball":"https://registry.npmmirror.com/q/-/q-1.5.1.tgz","size":36808,"integrity":"sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="},"maintainers":[{"name":"kriskowal","email":"kris.kowal@cixar.com"},{"name":"domenic","email":"domenic@domenicdenicola.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/q-1.5.1.tgz_1508435736930_0.7891315249726176"},"_cnpmcore_publish_time":"2022-03-24T09:33:19.327Z","readme":"[![Build Status](https://secure.travis-ci.org/kriskowal/q.svg?branch=master)](http://travis-ci.org/kriskowal/q)\n[![CDNJS](https://img.shields.io/cdnjs/v/q.js.svg)](https://cdnjs.com/libraries/q.js)\n\n\n \n\n\nIf a function cannot return a value or throw an exception without\nblocking, it can return a promise instead. A promise is an object\nthat represents the return value or the thrown exception that the\nfunction may eventually provide. A promise can also be used as a\nproxy for a [remote object][Q-Connection] to overcome latency.\n\n[Q-Connection]: https://github.com/kriskowal/q-connection\n\nOn the first pass, promises can mitigate the “[Pyramid of\nDoom][POD]”: the situation where code marches to the right faster\nthan it marches forward.\n\n[POD]: http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/\n\n```javascript\nstep1(function (value1) {\n step2(value1, function(value2) {\n step3(value2, function(value3) {\n step4(value3, function(value4) {\n // Do something with value4\n });\n });\n });\n});\n```\n\nWith a promise library, you can flatten the pyramid.\n\n```javascript\nQ.fcall(promisedStep1)\n.then(promisedStep2)\n.then(promisedStep3)\n.then(promisedStep4)\n.then(function (value4) {\n // Do something with value4\n})\n.catch(function (error) {\n // Handle any error from all above steps\n})\n.done();\n```\n\nWith this approach, you also get implicit error propagation, just like `try`,\n`catch`, and `finally`. An error in `promisedStep1` will flow all the way to\nthe `catch` function, where it’s caught and handled. (Here `promisedStepN` is\na version of `stepN` that returns a promise.)\n\nThe callback approach is called an “inversion of control”.\nA function that accepts a callback instead of a return value\nis saying, “Don’t call me, I’ll call you.”. Promises\n[un-invert][IOC] the inversion, cleanly separating the input\narguments from control flow arguments. This simplifies the\nuse and creation of API’s, particularly variadic,\nrest and spread arguments.\n\n[IOC]: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript\n\n\n## Getting Started\n\nThe Q module can be loaded as:\n\n- A ``