The following deprecated or undocumented methods will be removed. Their replacements are listed here:
0.8.x method | 0.9 replacement |
---|---|
call , apply , bind (*) |
fcall /invoke , fapply /post , fbind |
ncall , napply , bind (*) |
nfcall /ninvoke , nfapply /npost , nfbind |
end |
done |
ref |
resolve |
node |
nbind |
nend |
nodeify |
deferred.node |
deferred.makeNodeResolver |
Method , sender |
dispatcher |
send |
dispatch |
view , viewInfo |
(none) |
(*) Use of thisp
is discouraged. For calling methods, use post
or
invoke
.
- 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
- 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
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
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
- Support Montage Require
- 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.
- 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
- 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.
- 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.
- Deprecated
ref
in favor ofresolve
as recommended by @domenic. - Update event-queue dependency.
- Fixed Opera bug. #35 @cadorn
- Fixed
Q.all([])
#32 @domenic
- WARNING:
enqueue
removed. UsenextTick
instead. This is more consistent with NodeJS and (subjectively) more explicit and intuitive. - WARNING:
def
removed. Usemaster
instead. The termdef
was too confusing to new users. - WARNING:
spy
removed in favor offin
. - WARNING:
wait
removed. Doall(args).get(0)
instead. - WARNING:
join
removed. Doall(args).spread(callback)
instead. - WARNING: Removed the
Q
function module.exports alias forQ.ref
. It conflicts withQ.apply
in weird ways, making it uncallable. - Revised
delay
so that it accepts both(value, timeout)
and(timeout)
variations based on arguments length. - Added
ref().spread(cb(...args))
, a variant ofthen
that spreads an array across multiple arguments. Useful withall()
. - Added
defer().node()
Node callback generator. The callback accepts(error, value)
or(error, ...values)
. For multiple value arguments, the fulfillment value is an array, useful in conjunction withspread
. - Added
node
andncall
, both with the signature(fun, thisp_opt, ...args)
. The former is a decorator and the latter calls immediately.node
optional binds and partially applies.ncall
can bind and pass arguments.
- Fixed thenable promise assimilation.
- Stopped shimming
Array.prototype.reduce
. The enumerable property has bad side-effects. Libraries that depend on this (for example, QQ) will need to be revised.
- WARNING: Removed
report
andasap
- WARNING: The
callback
argument of thefin
function no longer receives any arguments. Thus, it can be used to call functions that should not receive arguments on resolution. Usewhen
,then
, orfail
if you need a value. - IMPORTANT: Fixed a bug in the use of
MessageChannel
fornextTick
. - Renamed
enqueue
tonextTick
. - Added experimental
view
andviewInfo
for creating views of promises either when or before they're fulfilled. - Shims are now externally applied so subsequent scripts or dependees can use them.
- Improved minification results.
- Improved readability.
- WARNING: In practice, the implementation of
spy
and the namefin
were useful. I've removed the oldfin
implementation and renamed/aliasedspy
. - The "q" module now exports its
ref
function as a "Q" constructor, with module systems that support exports assignment including NodeJS, RequireJS, and when used as a<script>
tag. Notably, strictly compliant CommonJS does not support this, but UncommonJS does. - Added
async
decorator for generators that use yield to "trampoline" promises. In engines that support generators (SpiderMonkey), this will greatly reduce the need for nested callbacks. - Made
when
chainable. - Made
all
chainable.
- Added
all
and refactoredjoin
andwait
to use it. All of these will now reject at the earliest rejection.
- Minor improvement to
spy
; now waits for resolution of callback promise.
- Made most Q API methods chainable on promise objects, and
turned the previous promise-methods of
join
,wait
, andreport
into Q API methods. - Added
apply
andcall
to the Q API, andapply
as a promise handler. - Added
fail
,fin
, andspy
to Q and the promise prototype for convenience when observing rejection, fulfillment and rejection, or just observing without affecting the resolution. - Renamed
def
(althoughdef
remains shimmed until the next major release) tomaster
. - Switched to using
MessageChannel
for next tick task enqueue in browsers that support it.
- Exceptions are no longer reported when consumed.
- Removed
error
from the API. Since exceptions are getting consumed, throwing them in an errback causes the exception to silently disappear. Useend
. - Added
end
as both an API method and a promise-chain ending method. It causes propagated rejections to be thrown, which allows Node to write stack traces and emituncaughtException
events, and browsers to likewise emitonerror
and log to the console. - Added
join
andwait
as promise chain functions, so you can wait for variadic promises, returning your own promise back, or join variadic promises, resolving with a callback that receives variadic fulfillment values.
end
no longer returns a promise. It is the end of the promise chain.- Stopped reporting thrown exceptions in
when
callbacks and errbacks. These must be explicitly reported through.end()
,.then(null, Q.error)
, or some other mechanism. - Added
report
as an API method, which can be used as an errback to report and propagate an error. - Added
report
as a promise-chain method, so an error can be reported if it passes such a gate.
- Fixed
<script>
support that regressed with 0.4.2 because of "use strict" in the module system multi-plexer.
- Added support for RequireJS (jburke)
- Added an "end" method to the promise prototype, as a shorthand for waiting for the promise to be resolved gracefully, and failing to do so, to dump an error message.
- *Removed the utility modules. NPM and Node no longer expose any module except the main module. These have been moved and merged into the "qq" package.
- *In a non-CommonJS browser, q.js can be used as a script. It now creates a Q global variable.
- Fixed thenable assimilation.
- Fixed some issues with asap, when it resolves to undefined, or throws an exception.
- The
post
method has been reverted to its original signature, as provided in Tyler Close'sref_send
API. That is,post
accepts two arguments, the second of which is an arbitrary object, but usually invocation arguments as anArray
. To provide variadic arguments topost
, there is a newinvoke
function that posts the variadic arguments to the value given in the first argument. - The
defined
method has been moved fromq
toq/util
since it gets no use in practice but is still theoretically useful. - The
Promise
constructor has been renamed tomakePromise
to be consistent with the convention that functions that do not require thenew
keyword to be used as constructors have camelCase names. - The
isResolved
function has been renamed toisFulfilled
. There is a newisResolved
function that indicates whether a value is not a promise or, if it is a promise, whether it has been either fulfilled or rejected. The code has been revised to reflect this nuance in terminology.
- Added
join
to"q/util"
for variadically joining multiple promises.
- The future-compatible
invoke
method has been added, to replacepost
, sincepost
will become backward- incompatible in the next major release. - Exceptions thrown in the callbacks of a
when
call are now emitted to Node's"uncaughtException"
process
event in addition to being returned as a rejection reason.
- Exceptions thrown in the callbacks of a
when
call are now consumed, warned, and transformed into rejections of the promise returned bywhen
.
- Fixed a minor bug in thenable assimilation, regressed because of the change in the forwarding protocol.
- Fixed behavior of "q/util"
deep
method on dates and other primitives. Github issue #11.
- Thenables (objects with a "then" method) are accepted and provided, bringing this implementation of Q into conformance with Promises/A, B, and D.
- Added
makePromise
, to replace thePromise
function eventually. - Rejections are now also duck-typed. A rejection is a promise with a valueOf method that returns a rejection descriptor. A rejection descriptor has a "promiseRejected" property equal to "true" and a "reason" property corresponding to the rejection reason.
- Altered the
makePromise
API such that thefallback
method no longer receives a superfluousresolved
method after theoperator
. The fallback method is responsible only for returning a resolution. This breaks an undocumented API, so third-party API's depending on the previous undocumented behavior may break.
- Changed promises into a duck-type such that multiple
instances of the Q module can exchange promise objects.
A promise is now defined as "an object that implements the
promiseSend(op, resolved, ...)
method andvalueOf
". - Exceptions in promises are now captured and returned as rejections.
- Fixed bug in
ref
that preventeddel
messages from being received (gozala) - Fixed a conflict with FireFox 4; constructor property is now read-only.
- Added
keys
message to promises and to the promise API.
- Added boilerplate to
q/queue
andq/util
. - Fixed missing dependency to
q/queue
.
- The
resolve
andreject
methods ofdefer
objects now return the resolution promise for convenience. - Added
q/util
, which providesstep
,delay
,shallow
,deep
, and three reduction orders. - Added
q/queue
module for a promiseQueue
. - Added
q-comm
to the list of compatible libraries. - Deprecated
defined
fromq
, with intent to move it toq/util
.
- Changed post(ref, name, args) to variadic post(ref, name, ...args). BACKWARD INCOMPATIBLE
- Added a def(value) method to annotate an object as being necessarily a local value that cannot be serialized, such that inter-process/worker/vat promise communication libraries will send messages to it, but never send it back.
- Added a send(value, op, ...args) method to the public API, for forwarding messages to a value or promise in a future turn.
- Added isRejected() for testing whether a value is a rejected promise. isResolved() retains the behavior of stating that rejected promises are not resolved.
- Fixed isResolved(null) and isResolved(undefined) [issue #9]
- Fixed a problem with the Object.create shim
- shimmed ES5 Object.create in addition to Object.freeze for compatibility on non-ES5 engines (gozala)
- Q.isResolved added
- promise.valueOf() now returns the value of resolved and near values
- asap retried
- promises are frozen when possible
- fixed dependency list for Teleport (gozala)
- all unit tests now pass (gozala)
- added support for Teleport as an engine (gozala)
- simplified and updated methods for getting internal print and enqueue functions universally (gozala)
- fixed erroneous link to the q module in package.json
- restructured for overlay style package compatibility
- removed asap because it was broken, probably down to the philosophy.
- removed q-util
- fixed asap so it returns a value if completed
- added q-util
- initial version