All Versions
Latest Version
Avg Release Cycle
150 days
Latest Release
3167 days ago

Changelog History
Page 3

  • v0.9.0 Changes

    🚀 This release removes many layers of deprecated methods and brings Q closer to alignment with Mark Miller’s TC39 strawman for concurrency. At the same 🛠 time, it fixes many bugs and adds a few features around error handling. Finally, ⚡️ it comes with an updated and comprehensive API Reference.

    API Cleanup

    🚚 The following deprecated or undocumented methods have been removed. Their replacements are listed here:

    0.8.x method 0.9 replacement Q.ref Q call, apply, bind () fcall/invoke, fapply/post, fbind ncall, napply () nfcall/ninvoke, nfapply/npost end done put set node nbind nend nodeify isResolved isPending deferred.node deferred.makeNodeResolver Method, sender dispatcher send dispatch view, viewInfo (none)

    (*) Use of thisp is discouraged. For calling methods, use post or invoke.

    Alignment with the Concurrency Strawman

    • Q now exports a Q(value) function, an alias for resolve., Q.apply, and Q.bind were removed to make room for the same methods on the function prototype.
    • invoke has been aliased to send in all its forms.
    • post with no method name acts like fapply.

    Error Handling

    • Long stack traces can be turned off by setting Q.stackJumpLimit to zero. In the future, this property will be used to fine tune how many stack jumps are retained in long stack traces; for now, anything nonzero is treated as one (since Q only tracks one stack jump at the moment, see #144). #168
    • In Node.js, if there are unhandled rejections when the process exits, they are output to the console. #115


    • delete and set (née put) no longer have a fulfillment value.
    • Q promises are no longer frozen, which helps with performance.
    • thenReject is now included, as a counterpart to thenResolve.
    • 💻 The included browser nextTick shim is now faster. #195 @rkatic.

    🐛 Bug Fixes

    • Q now works in Internet Explorer 10. #186 @ForbesLindesay
    • fbind no longer hard-binds the returned function's this to undefined. #202
    • Q.reject no longer leaks memory. #148
    • npost with no arguments now works. #207
    • allResolved now works with non-Q promises ("thenables"). #179
    • 💻 keys behavior is now correct even in browsers without native Object.keys. #192 @rkatic
    • 👻 isRejected and the exception property now work correctly if the rejection reason is falsy. #198

    Internals and Advanced

    • The internal interface for a promise now uses dispatchPromise(resolve, op, operands) instead of sendPromise(op, resolve, ...operands), which reduces the cases where Q needs to do argument slicing.
    • The internal protocol uses different operands. "put" is now "set". "del" is now "delete". "view" and "viewInfo" have been removed.
    • Q.fulfill has been added. It is distinct from Q.resolve in that it does not pass promises through, nor coerces promises from other systems. The promise becomes the fulfillment value. This is only recommended for use when trying to fulfill a promise with an object that has a then function that is at the same time not a promise.
  • v0.8.12 Changes

    • Treat foreign promises as unresolved in Q.isFulfilled; this lets Q.all work on arrays containing foreign promises. #154
    • 🛠 Fix minor incompliances with the Promises/A+ spec and [test suite][]. #157 #158

    ✅ [test suite]:

  • v0.8.11 Changes

    • Added nfcall, nfapply, and nfbind as thisp-less versions of ncall, napply, and nbind. The latter are now deprecated. #142
    • Long stack traces no longer cause linearly-growing memory usage when chaining promises together. #111
    • Inspecting error.stack in a rejection handler will now give a long stack trace. #103
    • Fixed Q.timeout to clear its timeout handle when the promise is rejected; previously, it kept the event loop alive until the timeout period expired. #145 @dfilatov
    • Added q/queue module, which exports an infinite promise queue constructor.
  • v0.8.10 Changes

    • Added done as a replacement for end, taking the usual fulfillment, rejection, and progress handlers. It's essentially equivalent to then(f, r, p).end().
    • Added Q.onerror, a settable error trap that you can use to get full stack traces for uncaught errors. #94
    • Added thenResolve as a shortcut for returning a constant value once a promise is fulfilled. #108 @ForbesLindesay
    • Various tweaks to progress notification, including propagation and transformation of progress values and only forwarding a single progress object.
    • Renamed nend to nodeify. It no longer returns an always-fulfilled promise when a Node callback is passed.
    • deferred.resolve and deferred.reject no longer (sometimes) return deferred.promise.
    • Fixed stack traces getting mangled if they hit end twice. #116 #121 @ef4
    • Fixed ninvoke and npost to work on promises for objects with Node methods. #134
    • Fixed accidental coercion of objects with nontrivial valueOf methods, like Dates, by the promise's valueOf method. #135
    • Fixed spread not calling the passed rejection handler if given a rejected promise.
  • v0.8.9 Changes

    • Added nend
    • Added preliminary progress notification support, via promise.then(onFulfilled, onRejected, onProgress), promise.progress(onProgress), and deferred.notify(...progressData).
    • Made put and del return the object acted upon for easier chaining. #84
    • Fixed coercion cycles with cooperating promises. #106
  • v0.8.6 Changes

    • Fixed npost and ninvoke to pass the correct thisp. #74
    • Fixed various cases involving unorthodox rejection reasons. #73 #90 @ef4
    • Fixed double-resolving of misbehaved custom promises. #75
    • Sped up Q.all for arrays contain already-resolved promises or scalar values. @ForbesLindesay
    • Made stack trace filtering work when concatenating assets. #93 @ef4
    • Added warnings for deprecated methods. @ForbesLindesay
    • Added .npmignore file so that dependent packages get a slimmer node_modules directory.
  • v0.8.5 Changes

    • Added preliminary support for long traces (@domenic)
    • Added fapply, fcall, fbind for non-thisp promised function calls.
    • Added return for async generators, where generators are implemented.
    • Rejected promises now have an "exception" property. If an object isRejected(object), then object.valueOf().exception will be the wrapped error.
    • Added Jasmine specifications
    • Support Internet Explorers 7–9 (with multiple bug fixes @domenic)
    • Support Firefox 12
    • Support Safari 5.1.5
    • Support Chrome 18
  • v0.8.4 Changes

    • WARNING: promise.timeout is now rejected with an Error object and the message now includes the duration of the timeout in miliseconds. This doesn't constitute (in my opinion) a backward-incompatibility since it is a change of an undocumented and unspecified public behavior, but if you happened to depend on the exception being a string, you will need to revise your code.
    • Added deferred.makeNodeResolver() to replace the more cryptic deferred.node() method.
    • Added experimental Q.promise(maker(resolve, reject)) to make a promise inside a callback, such that thrown exceptions in the callback are converted and the resolver and rejecter are arguments. This is a shorthand for making a deferred directly and inspired by @gozala’s stream constructor pattern and the Microsoft Windows Metro Promise constructor interface.
    • Added experimental Q.begin() that is intended to kick off chains of .then so that each of these can be reordered without having to edit the new and former first step.
  • v0.8.3 Changes

    • Added isFulfilled, isRejected, and isResolved to the promise prototype.
    • Added allResolved for waiting for every promise to either be fulfilled or rejected, without propagating an error. @utvara #53
    • Added Q.bind as a method to transform functions that return and throw into promise-returning functions. See an example. @domenic
    • Renamed node export to nbind, and added napply to complete the set. node remains as deprecated. @domenic #58
    • Renamed Method export to sender. Method remains as deprecated and will be removed in the next major version since I expect it has very little usage.
    • Added browser console message indicating a live list of unhandled errors.
    • Added support for msSetImmediate (IE10) or setImmediate (available via polyfill) as a browser-side nextTick implementation. #44 #50 #59
    • Stopped using the event-queue dependency, which was in place for Narwhal support: now directly using process.nextTick.
    • WARNING: EXPERIMENTAL: added finally alias for fin, catch alias for fail, try alias for call, and delete alias for del. These properties are enquoted in the library for cross-browser compatibility, but may be used as property names in modern engines.