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, usepost
orinvoke
.Alignment with the Concurrency Strawman
- Q now exports a
Q(value)
function, an alias forresolve
.Q.call
,Q.apply
, andQ.bind
were removed to make room for the same methods on the function prototype. -
invoke
has been aliased tosend
in all its forms. -
post
with no method name acts likefapply
.
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
Other
-
delete
andset
(néeput
) no longer have a fulfillment value. - Q promises are no longer frozen, which helps with performance.
-
thenReject
is now included, as a counterpart tothenResolve
. - 💻 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'sthis
toundefined
. #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 nativeObject.keys
. #192 @rkatic - 👻
isRejected
and theexception
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 ofsendPromise(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 fromQ.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 athen
function that is at the same time not a promise.
- Q now exports a
-
v0.8.12 Changes
- Treat foreign promises as unresolved in
Q.isFulfilled
; this letsQ.all
work on arrays containing foreign promises. #154 - 🛠 Fix minor incompliances with the Promises/A+ spec and [test suite][]. #157 #158
✅ [test suite]: https://github.com/promises-aplus/promises-tests
- Treat foreign promises as unresolved in
-
v0.8.11 Changes
- Added
nfcall
,nfapply
, andnfbind
asthisp
-less versions ofncall
,napply
, andnbind
. 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.
- Added
-
v0.8.10 Changes
- Added
done
as a replacement forend
, taking the usual fulfillment, rejection, and progress handlers. It's essentially equivalent tothen(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
tonodeify
. It no longer returns an always-fulfilled promise when a Node callback is passed. deferred.resolve
anddeferred.reject
no longer (sometimes) returndeferred.promise
.- Fixed stack traces getting mangled if they hit
end
twice. #116 #121 @ef4 - Fixed
ninvoke
andnpost
to work on promises for objects with Node methods. #134 - Fixed accidental coercion of objects with nontrivial
valueOf
methods, likeDate
s, by the promise'svalueOf
method. #135 - Fixed
spread
not calling the passed rejection handler if given a rejected promise.
- Added
-
v0.8.9 Changes
- Added
nend
- Added preliminary progress notification support, via
promise.then(onFulfilled, onRejected, onProgress)
,promise.progress(onProgress)
, anddeferred.notify(...progressData)
. - Made
put
anddel
return the object acted upon for easier chaining. #84 - Fixed coercion cycles with cooperating promises. #106
- Added
-
v0.8.7 Changes
- Support Montage Require
-
v0.8.6 Changes
- Fixed
npost
andninvoke
to pass the correctthisp
. #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 slimmernode_modules
directory.
- Fixed
-
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 anError
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 crypticdeferred.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.
- WARNING:
-
v0.8.3 Changes
- Added
isFulfilled
,isRejected
, andisResolved
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 tonbind
, and addednapply
to complete the set.node
remains as deprecated. @domenic #58 - Renamed
Method
export tosender
.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) orsetImmediate
(available via polyfill) as a browser-sidenextTick
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 forfin
,catch
alias forfail
,try
alias forcall
, anddelete
alias fordel
. These properties are enquoted in the library for cross-browser compatibility, but may be used as property names in modern engines.
- Added