4 - Address an issue that prevented Q from being used as a `<script>` for
5 Firefox add-ons. Q can now be used in any environment that provides `window`
6 or `self` globals, favoring `window` since add-ons have an an immutable
7 `self` that is distinct from `window`.
11 - Add `noConflict` support for use in `<script>` (@jahnjw).
15 - Add tracking for unhandled and handled rejections in Node.js (@benjamingr).
19 - Fix Node.js environment detection for modern Browserify (@kahnjw).
23 - Added Q.any(promisesArray) method (@vergara).
24 Returns a promise fulfilled with the value of the first resolved promise in
25 promisesArray. If all promises in promisesArray are rejected, it returns
30 - Removed extraneous files from the npm package by using the "files"
31 whitelist in package.json instead of the .npmignore blacklist.
36 - Fix a pair of regressions in bootstrapping, one which precluded
37 WebWorker support, and another that precluded support in
38 ``<script>`` usage outright. #607
42 - Adds support for enabling long stack traces in node.js by setting
43 environment variable `Q_DEBUG=1`.
44 - Introduces the `tap` method to promises, which will see a value
45 pass through without alteration.
46 - Use instanceof to recognize own promise instances as opposed to
48 - Construct timeout errors with `code === ETIMEDOUT` (Kornel Lesiński)
49 - More descriminant CommonJS module environment detection.
50 - Dropped continuous integration for Node.js 0.6 and 0.8 because of
51 changes to npm that preclude the use of new `^` version predicate
52 operator in any transitive dependency.
53 - Users can now override `Q.nextTick`.
57 - Adds support for `Q.Promise`, which implements common usage of the
58 ES6 `Promise` constructor and its methods. `Promise` does not have
59 a valid promise constructor and a proper implementation awaits
61 - Removes the console stopgap for a promise inspector. This no longer
62 works with any degree of reliability.
63 - Fixes support for content security policies that forbid eval. Now
64 using the `StopIteration` global to distinguish SpiderMonkey
65 generators from ES6 generators, assuming that they will never
70 :cake: This is all but a re-release of version 0.9, which has settled
71 into a gentle maintenance mode and rightly deserves an official 1.0.
72 An ambitious 2.0 release is already around the corner, but 0.9/1.0
73 have been distributed far and wide and demand long term support.
75 - Q will now attempt to post a debug message in browsers regardless
76 of whether window.Touch is defined. Chrome at least now has this
77 property regardless of whether touch is supported by the underlying
79 - Remove deprecation warning from `promise.valueOf`. The function is
80 called by the browser in various ways so there is no way to
81 distinguish usage that should be migrated from usage that cannot be
86 - :warning: `q.min.js` is no longer checked-in. It is however still
87 created by Grunt and NPM.
88 - Fixes a bug that inhibited `Q.async` with implementations of the new
90 - Fixes a bug with `nextTick` affecting Safari 6.0.5 the first time a
91 page loads when an `iframe` is involved.
92 - Introduces `passByCopy`, `join`, and `race`.
93 - Shows stack traces or error messages on the console, instead of
95 - Elimintates wrapper methods for improved performance.
96 - `Q.all` now propagates progress notifications of the form you might
97 expect of ES6 iterations, `{value, index}` where the `value` is the
98 progress notification from the promise at `index`.
102 - Fixes a bug in recognizing the difference between compatible Q
103 promises, and Q promises from before the implementation of "inspect".
104 The latter are now coerced.
105 - Fixes an infinite asynchronous coercion cycle introduced by former
106 solution, in two independently sufficient ways. 1.) All promises
107 returned by makePromise now implement "inspect", albeit a default
108 that reports that the promise has an "unknown" state. 2.) The
109 implementation of "then/when" is now in "then" instead of "when", so
110 that the responsibility to "coerce" the given promise rests solely in
111 the "when" method and the "then" method may assume that "this" is a
112 promise of the right type.
113 - Refactors `nextTick` to use an unrolled microtask within Q regardless
114 of how new ticks a requested. #316 @rkatic
118 - Introduces `inspect` for getting the state of a promise as
119 `{state: "fulfilled" | "rejected" | "pending", value | reason}`.
120 - Introduces `allSettled` which produces an array of promises states
121 for the input promises once they have all "settled". This is in
122 accordance with a discussion on Promises/A+ that "settled" refers to
123 a promise that is "fulfilled" or "rejected". "resolved" refers to a
124 deferred promise that has been "resolved" to another promise,
125 "sealing its fate" to the fate of the successor promise.
126 - Long stack traces are now off by default. Set `Q.longStackSupport`
127 to true to enable long stack traces.
128 - Long stack traces can now follow the entire asynchronous history of a
129 promise, not just a single jump.
130 - Introduces `spawn` for an immediately invoked asychronous generator.
132 - Support for *experimental* synonyms `mapply`, `mcall`, `nmapply`,
133 `nmcall` for method invocation.
137 - `isPromise` and `isPromiseAlike` now always returns a boolean
138 (even for falsy values). #284 @lfac-pt
139 - Support for ES6 Generators in `async` #288 @andywingo
140 - Clear duplicate promise rejections from dispatch methods #238 @SLaks
141 - Unhandled rejection API #296 @domenic
142 `stopUnhandledRejectionTracking`, `getUnhandledReasons`,
143 `resetUnhandledRejections`.
147 - Add the ability to give `Q.timeout`'s errors a custom error message. #270
149 - Fix Q's call-stack busting behavior in Node.js 0.10, by switching from
150 `process.nextTick` to `setImmediate`. #254 #259
151 - Fix Q's behavior when used with the Mocha test runner in the browser, since
152 Mocha introduces a fake `process` global without a `nextTick` property. #267
153 - Fix some, but not all, cases wherein Q would give false positives in its
154 unhandled rejection detection (#252). A fix for other cases (#238) is
155 hopefully coming soon.
156 - Made `Q.promise` throw early if given a non-function.
160 - Pass through progress notifications when using `timeout`. #229 @omares
161 - Pass through progress notifications when using `delay`.
162 - Fix `nbind` to actually bind the `thisArg`. #232 @davidpadbury
166 - Made the AMD detection compatible with the RequireJS optimizer's `namespace`
167 option. #225 @terinjokes
168 - Fix side effects from `valueOf`, and thus from `isFulfilled`, `isRejected`,
169 and `isPending`. #226 @benjamn
173 This release removes many layers of deprecated methods and brings Q closer to
174 alignment with Mark Miller’s TC39 [strawman][] for concurrency. At the same
175 time, it fixes many bugs and adds a few features around error handling. Finally,
176 it comes with an updated and comprehensive [API Reference][].
178 [strawman]: http://wiki.ecmascript.org/doku.php?id=strawman:concurrency
179 [API Reference]: https://github.com/kriskowal/q/wiki/API-Reference
183 The following deprecated or undocumented methods have been removed.
184 Their replacements are listed here:
189 <th>0.8.x method</th>
190 <th>0.9 replacement</th>
195 <td><code>Q.ref</code></td>
196 <td><code>Q</code></td>
199 <td><code>call</code>, <code>apply</code>, <code>bind</code> (*)</td>
200 <td><code>fcall</code>/<code>invoke</code>, <code>fapply</code>/<code>post</code>, <code>fbind</code></td>
203 <td><code>ncall</code>, <code>napply</code> (*)</td>
204 <td><code>nfcall</code>/<code>ninvoke</code>, <code>nfapply</code>/<code>npost</code></td>
207 <td><code>end</code></td>
208 <td><code>done</code></td>
211 <td><code>put</code></td>
212 <td><code>set</code></td>
215 <td><code>node</code></td>
216 <td><code>nbind</code></td>
219 <td><code>nend</code></td>
220 <td><code>nodeify</code></td>
223 <td><code>isResolved</code></td>
224 <td><code>isPending</code></td>
227 <td><code>deferred.node</code></td>
228 <td><code>deferred.makeNodeResolver</code></td>
231 <td><code>Method</code>, <code>sender</code></td>
232 <td><code>dispatcher</code></td>
235 <td><code>send</code></td>
236 <td><code>dispatch</code></td>
239 <td><code>view</code>, <code>viewInfo</code></td>
246 (*) Use of ``thisp`` is discouraged. For calling methods, use ``post`` or
249 ### Alignment with the Concurrency Strawman
251 - Q now exports a `Q(value)` function, an alias for `resolve`.
252 `Q.call`, `Q.apply`, and `Q.bind` were removed to make room for the
253 same methods on the function prototype.
254 - `invoke` has been aliased to `send` in all its forms.
255 - `post` with no method name acts like `fapply`.
259 - Long stack traces can be turned off by setting `Q.stackJumpLimit` to zero.
260 In the future, this property will be used to fine tune how many stack jumps
261 are retained in long stack traces; for now, anything nonzero is treated as
262 one (since Q only tracks one stack jump at the moment, see #144). #168
263 - In Node.js, if there are unhandled rejections when the process exits, they
264 are output to the console. #115
268 - `delete` and `set` (née `put`) no longer have a fulfillment value.
269 - Q promises are no longer frozen, which
270 [helps with performance](http://code.google.com/p/v8/issues/detail?id=1858).
271 - `thenReject` is now included, as a counterpart to `thenResolve`.
272 - The included browser `nextTick` shim is now faster. #195 @rkatic.
276 - Q now works in Internet Explorer 10. #186 @ForbesLindesay
277 - `fbind` no longer hard-binds the returned function's `this` to `undefined`.
279 - `Q.reject` no longer leaks memory. #148
280 - `npost` with no arguments now works. #207
281 - `allResolved` now works with non-Q promises ("thenables"). #179
282 - `keys` behavior is now correct even in browsers without native
283 `Object.keys`. #192 @rkatic
284 - `isRejected` and the `exception` property now work correctly if the
285 rejection reason is falsy. #198
287 ### Internals and Advanced
289 - The internal interface for a promise now uses
290 `dispatchPromise(resolve, op, operands)` instead of `sendPromise(op,
291 resolve, ...operands)`, which reduces the cases where Q needs to do
293 - The internal protocol uses different operands. "put" is now "set".
294 "del" is now "delete". "view" and "viewInfo" have been removed.
295 - `Q.fulfill` has been added. It is distinct from `Q.resolve` in that
296 it does not pass promises through, nor coerces promises from other
297 systems. The promise becomes the fulfillment value. This is only
298 recommended for use when trying to fulfill a promise with an object that has
299 a `then` function that is at the same time not a promise.
302 - Treat foreign promises as unresolved in `Q.isFulfilled`; this lets `Q.all`
303 work on arrays containing foreign promises. #154
304 - Fix minor incompliances with the [Promises/A+ spec][] and [test suite][]. #157
307 [Promises/A+ spec]: http://promises-aplus.github.com/promises-spec/
308 [test suite]: https://github.com/promises-aplus/promises-tests
312 - Added ``nfcall``, ``nfapply``, and ``nfbind`` as ``thisp``-less versions of
313 ``ncall``, ``napply``, and ``nbind``. The latter are now deprecated. #142
314 - Long stack traces no longer cause linearly-growing memory usage when chaining
315 promises together. #111
316 - Inspecting ``error.stack`` in a rejection handler will now give a long stack
318 - Fixed ``Q.timeout`` to clear its timeout handle when the promise is rejected;
319 previously, it kept the event loop alive until the timeout period expired.
321 - Added `q/queue` module, which exports an infinite promise queue
326 - Added ``done`` as a replacement for ``end``, taking the usual fulfillment,
327 rejection, and progress handlers. It's essentially equivalent to
328 ``then(f, r, p).end()``.
329 - Added ``Q.onerror``, a settable error trap that you can use to get full stack
330 traces for uncaught errors. #94
331 - Added ``thenResolve`` as a shortcut for returning a constant value once a
332 promise is fulfilled. #108 @ForbesLindesay
333 - Various tweaks to progress notification, including propagation and
334 transformation of progress values and only forwarding a single progress
336 - Renamed ``nend`` to ``nodeify``. It no longer returns an always-fulfilled
337 promise when a Node callback is passed.
338 - ``deferred.resolve`` and ``deferred.reject`` no longer (sometimes) return
339 ``deferred.promise``.
340 - Fixed stack traces getting mangled if they hit ``end`` twice. #116 #121 @ef4
341 - Fixed ``ninvoke`` and ``npost`` to work on promises for objects with Node
343 - Fixed accidental coercion of objects with nontrivial ``valueOf`` methods,
344 like ``Date``s, by the promise's ``valueOf`` method. #135
345 - Fixed ``spread`` not calling the passed rejection handler if given a rejected
351 - Added preliminary progress notification support, via
352 ``promise.then(onFulfilled, onRejected, onProgress)``,
353 ``promise.progress(onProgress)``, and ``deferred.notify(...progressData)``.
354 - Made ``put`` and ``del`` return the object acted upon for easier chaining.
356 - Fixed coercion cycles with cooperating promises. #106
360 - Support [Montage Require](http://github.com/kriskowal/mr)
364 - Fixed ``npost`` and ``ninvoke`` to pass the correct ``thisp``. #74
365 - Fixed various cases involving unorthodox rejection reasons. #73 #90
367 - Fixed double-resolving of misbehaved custom promises. #75
368 - Sped up ``Q.all`` for arrays contain already-resolved promises or scalar
369 values. @ForbesLindesay
370 - Made stack trace filtering work when concatenating assets. #93 @ef4
371 - Added warnings for deprecated methods. @ForbesLindesay
372 - Added ``.npmignore`` file so that dependent packages get a slimmer
373 ``node_modules`` directory.
377 - Added preliminary support for long traces (@domenic)
378 - Added ``fapply``, ``fcall``, ``fbind`` for non-thisp
379 promised function calls.
380 - Added ``return`` for async generators, where generators
382 - Rejected promises now have an "exception" property. If an object
383 isRejected(object), then object.valueOf().exception will
384 be the wrapped error.
385 - Added Jasmine specifications
386 - Support Internet Explorers 7–9 (with multiple bug fixes @domenic)
388 - Support Safari 5.1.5
393 - WARNING: ``promise.timeout`` is now rejected with an ``Error`` object
394 and the message now includes the duration of the timeout in
395 miliseconds. This doesn't constitute (in my opinion) a
396 backward-incompatibility since it is a change of an undocumented and
397 unspecified public behavior, but if you happened to depend on the
398 exception being a string, you will need to revise your code.
399 - Added ``deferred.makeNodeResolver()`` to replace the more cryptic
400 ``deferred.node()`` method.
401 - Added experimental ``Q.promise(maker(resolve, reject))`` to make a
402 promise inside a callback, such that thrown exceptions in the
403 callback are converted and the resolver and rejecter are arguments.
404 This is a shorthand for making a deferred directly and inspired by
405 @gozala’s stream constructor pattern and the Microsoft Windows Metro
406 Promise constructor interface.
407 - Added experimental ``Q.begin()`` that is intended to kick off chains
408 of ``.then`` so that each of these can be reordered without having to
409 edit the new and former first step.
413 - Added ``isFulfilled``, ``isRejected``, and ``isResolved``
414 to the promise prototype.
415 - Added ``allResolved`` for waiting for every promise to either be
416 fulfilled or rejected, without propagating an error. @utvara #53
417 - Added ``Q.bind`` as a method to transform functions that
418 return and throw into promise-returning functions. See
419 [an example](https://gist.github.com/1782808). @domenic
420 - Renamed ``node`` export to ``nbind``, and added ``napply`` to
421 complete the set. ``node`` remains as deprecated. @domenic #58
422 - Renamed ``Method`` export to ``sender``. ``Method``
423 remains as deprecated and will be removed in the next
424 major version since I expect it has very little usage.
425 - Added browser console message indicating a live list of
427 - Added support for ``msSetImmediate`` (IE10) or ``setImmediate``
428 (available via [polyfill](https://github.com/NobleJS/setImmediate))
429 as a browser-side ``nextTick`` implementation. #44 #50 #59
430 - Stopped using the event-queue dependency, which was in place for
431 Narwhal support: now directly using ``process.nextTick``.
432 - WARNING: EXPERIMENTAL: added ``finally`` alias for ``fin``, ``catch``
433 alias for ``fail``, ``try`` alias for ``call``, and ``delete`` alias
434 for ``del``. These properties are enquoted in the library for
435 cross-browser compatibility, but may be used as property names in
440 - Deprecated ``ref`` in favor of ``resolve`` as recommended by
442 - Update event-queue dependency.
446 - Fixed Opera bug. #35 @cadorn
447 - Fixed ``Q.all([])`` #32 @domenic
451 - WARNING: ``enqueue`` removed. Use ``nextTick`` instead.
452 This is more consistent with NodeJS and (subjectively)
453 more explicit and intuitive.
454 - WARNING: ``def`` removed. Use ``master`` instead. The
455 term ``def`` was too confusing to new users.
456 - WARNING: ``spy`` removed in favor of ``fin``.
457 - WARNING: ``wait`` removed. Do ``all(args).get(0)`` instead.
458 - WARNING: ``join`` removed. Do ``all(args).spread(callback)`` instead.
459 - WARNING: Removed the ``Q`` function module.exports alias
460 for ``Q.ref``. It conflicts with ``Q.apply`` in weird
461 ways, making it uncallable.
462 - Revised ``delay`` so that it accepts both ``(value,
463 timeout)`` and ``(timeout)`` variations based on
465 - Added ``ref().spread(cb(...args))``, a variant of
466 ``then`` that spreads an array across multiple arguments.
467 Useful with ``all()``.
468 - Added ``defer().node()`` Node callback generator. The
469 callback accepts ``(error, value)`` or ``(error,
470 ...values)``. For multiple value arguments, the
471 fulfillment value is an array, useful in conjunction with
473 - Added ``node`` and ``ncall``, both with the signature
474 ``(fun, thisp_opt, ...args)``. The former is a decorator
475 and the latter calls immediately. ``node`` optional
476 binds and partially applies. ``ncall`` can bind and pass
481 - Fixed thenable promise assimilation.
485 - Stopped shimming ``Array.prototype.reduce``. The
486 enumerable property has bad side-effects. Libraries that
487 depend on this (for example, QQ) will need to be revised.
489 ## 0.7.0 - BACKWARD INCOMPATIBILITY
491 - WARNING: Removed ``report`` and ``asap``
492 - WARNING: The ``callback`` argument of the ``fin``
493 function no longer receives any arguments. Thus, it can
494 be used to call functions that should not receive
495 arguments on resolution. Use ``when``, ``then``, or
496 ``fail`` if you need a value.
497 - IMPORTANT: Fixed a bug in the use of ``MessageChannel``
499 - Renamed ``enqueue`` to ``nextTick``.
500 - Added experimental ``view`` and ``viewInfo`` for creating
501 views of promises either when or before they're
503 - Shims are now externally applied so subsequent scripts or
504 dependees can use them.
505 - Improved minification results.
506 - Improved readability.
508 ## 0.6.0 - BACKWARD INCOMPATIBILITY
510 - WARNING: In practice, the implementation of ``spy`` and
511 the name ``fin`` were useful. I've removed the old
512 ``fin`` implementation and renamed/aliased ``spy``.
513 - The "q" module now exports its ``ref`` function as a "Q"
514 constructor, with module systems that support exports
515 assignment including NodeJS, RequireJS, and when used as
516 a ``<script>`` tag. Notably, strictly compliant CommonJS
517 does not support this, but UncommonJS does.
518 - Added ``async`` decorator for generators that use yield
519 to "trampoline" promises. In engines that support
520 generators (SpiderMonkey), this will greatly reduce the
521 need for nested callbacks.
522 - Made ``when`` chainable.
523 - Made ``all`` chainable.
527 - Added ``all`` and refactored ``join`` and ``wait`` to use
528 it. All of these will now reject at the earliest
533 - Minor improvement to ``spy``; now waits for resolution of
538 - Made most Q API methods chainable on promise objects, and
539 turned the previous promise-methods of ``join``,
540 ``wait``, and ``report`` into Q API methods.
541 - Added ``apply`` and ``call`` to the Q API, and ``apply``
542 as a promise handler.
543 - Added ``fail``, ``fin``, and ``spy`` to Q and the promise
544 prototype for convenience when observing rejection,
545 fulfillment and rejection, or just observing without
546 affecting the resolution.
547 - Renamed ``def`` (although ``def`` remains shimmed until
548 the next major release) to ``master``.
549 - Switched to using ``MessageChannel`` for next tick task
550 enqueue in browsers that support it.
552 ## 0.5.0 - MINOR BACKWARD INCOMPATIBILITY
554 - Exceptions are no longer reported when consumed.
555 - Removed ``error`` from the API. Since exceptions are
556 getting consumed, throwing them in an errback causes the
557 exception to silently disappear. Use ``end``.
558 - Added ``end`` as both an API method and a promise-chain
559 ending method. It causes propagated rejections to be
560 thrown, which allows Node to write stack traces and
561 emit ``uncaughtException`` events, and browsers to
562 likewise emit ``onerror`` and log to the console.
563 - Added ``join`` and ``wait`` as promise chain functions,
564 so you can wait for variadic promises, returning your own
565 promise back, or join variadic promises, resolving with a
566 callback that receives variadic fulfillment values.
570 - ``end`` no longer returns a promise. It is the end of the
572 - Stopped reporting thrown exceptions in ``when`` callbacks
573 and errbacks. These must be explicitly reported through
574 ``.end()``, ``.then(null, Q.error)``, or some other
576 - Added ``report`` as an API method, which can be used as
577 an errback to report and propagate an error.
578 - Added ``report`` as a promise-chain method, so an error
579 can be reported if it passes such a gate.
583 - Fixed ``<script>`` support that regressed with 0.4.2
584 because of "use strict" in the module system
589 - Added support for RequireJS (jburke)
593 - Added an "end" method to the promise prototype,
594 as a shorthand for waiting for the promise to
595 be resolved gracefully, and failing to do so,
596 to dump an error message.
598 ## 0.4.0 - BACKWARD INCOMPATIBLE*
600 - *Removed the utility modules. NPM and Node no longer
601 expose any module except the main module. These have
602 been moved and merged into the "qq" package.
603 - *In a non-CommonJS browser, q.js can be used as a script.
604 It now creates a Q global variable.
605 - Fixed thenable assimilation.
606 - Fixed some issues with asap, when it resolves to
607 undefined, or throws an exception.
609 ## 0.3.0 - BACKWARD-INCOMPATIBLE
611 - The `post` method has been reverted to its original
612 signature, as provided in Tyler Close's `ref_send` API.
613 That is, `post` accepts two arguments, the second of
614 which is an arbitrary object, but usually invocation
615 arguments as an `Array`. To provide variadic arguments
616 to `post`, there is a new `invoke` function that posts
617 the variadic arguments to the value given in the first
619 - The `defined` method has been moved from `q` to `q/util`
620 since it gets no use in practice but is still
621 theoretically useful.
622 - The `Promise` constructor has been renamed to
623 `makePromise` to be consistent with the convention that
624 functions that do not require the `new` keyword to be
625 used as constructors have camelCase names.
626 - The `isResolved` function has been renamed to
627 `isFulfilled`. There is a new `isResolved` function that
628 indicates whether a value is not a promise or, if it is a
629 promise, whether it has been either fulfilled or
630 rejected. The code has been revised to reflect this
631 nuance in terminology.
635 - Added `join` to `"q/util"` for variadically joining
640 - The future-compatible `invoke` method has been added,
641 to replace `post`, since `post` will become backward-
642 incompatible in the next major release.
643 - Exceptions thrown in the callbacks of a `when` call are
644 now emitted to Node's `"uncaughtException"` `process`
645 event in addition to being returned as a rejection reason.
649 - Exceptions thrown in the callbacks of a `when` call
650 are now consumed, warned, and transformed into
651 rejections of the promise returned by `when`.
655 - Fixed a minor bug in thenable assimilation, regressed
656 because of the change in the forwarding protocol.
657 - Fixed behavior of "q/util" `deep` method on dates and
658 other primitives. Github issue #11.
662 - Thenables (objects with a "then" method) are accepted
663 and provided, bringing this implementation of Q
664 into conformance with Promises/A, B, and D.
665 - Added `makePromise`, to replace the `Promise` function
667 - Rejections are now also duck-typed. A rejection is a
668 promise with a valueOf method that returns a rejection
669 descriptor. A rejection descriptor has a
670 "promiseRejected" property equal to "true" and a
671 "reason" property corresponding to the rejection reason.
672 - Altered the `makePromise` API such that the `fallback`
673 method no longer receives a superfluous `resolved` method
674 after the `operator`. The fallback method is responsible
675 only for returning a resolution. This breaks an
676 undocumented API, so third-party API's depending on the
677 previous undocumented behavior may break.
681 - Changed promises into a duck-type such that multiple
682 instances of the Q module can exchange promise objects.
683 A promise is now defined as "an object that implements the
684 `promiseSend(op, resolved, ...)` method and `valueOf`".
685 - Exceptions in promises are now captured and returned
690 - Fixed bug in `ref` that prevented `del` messages from
691 being received (gozala)
692 - Fixed a conflict with FireFox 4; constructor property
697 - Added `keys` message to promises and to the promise API.
701 - Added boilerplate to `q/queue` and `q/util`.
702 - Fixed missing dependency to `q/queue`.
706 - The `resolve` and `reject` methods of `defer` objects now
707 return the resolution promise for convenience.
708 - Added `q/util`, which provides `step`, `delay`, `shallow`,
709 `deep`, and three reduction orders.
710 - Added `q/queue` module for a promise `Queue`.
711 - Added `q-comm` to the list of compatible libraries.
712 - Deprecated `defined` from `q`, with intent to move it to
715 ## 0.2.0 - BACKWARD INCOMPATIBLE
717 - Changed post(ref, name, args) to variadic
718 post(ref, name, ...args). BACKWARD INCOMPATIBLE
719 - Added a def(value) method to annotate an object as being
720 necessarily a local value that cannot be serialized, such
721 that inter-process/worker/vat promise communication
722 libraries will send messages to it, but never send it
724 - Added a send(value, op, ...args) method to the public API, for
725 forwarding messages to a value or promise in a future turn.
729 - Added isRejected() for testing whether a value is a rejected
730 promise. isResolved() retains the behavior of stating
731 that rejected promises are not resolved.
735 - Fixed isResolved(null) and isResolved(undefined) [issue #9]
736 - Fixed a problem with the Object.create shim
740 - shimmed ES5 Object.create in addition to Object.freeze
741 for compatibility on non-ES5 engines (gozala)
746 - promise.valueOf() now returns the value of resolved
749 - promises are frozen when possible
753 - fixed dependency list for Teleport (gozala)
754 - all unit tests now pass (gozala)
758 - added support for Teleport as an engine (gozala)
759 - simplified and updated methods for getting internal
760 print and enqueue functions universally (gozala)
764 - fixed erroneous link to the q module in package.json
768 - restructured for overlay style package compatibility
772 - removed asap because it was broken, probably down to the
778 - fixed asap so it returns a value if completed