Represents an ECMAScript 6 compliant Promise/A+ implementation. All Dexie methods that return a Promise will return a Dexie.Promise rather than native Promise.
Implementation of a Promise/A+ documented at .
See also Best Practices - Understand Promises
As of May 2018, all modern browsers started supporting Promises withing IndexedDB transactions. So the initial reason for introducing an alternate Promise implemetation is not as accurate as before. At least in the long term as users move away from old browsers. However, we also use Dexie.Promise to interact with native promises in order to maintain transaction zones, so we still need to have Dexie.Promise accomplish that for us.
Do the other way around (this time a A+ compliant Promise needed):
...but avoid it within transactions:
window.Promise is always safe to use within transactions, as Dexie will patch the global Promise within the transaction zone, but leave it untouched outside the zone.
catch()
finally()
Promise.newPSD()
PSD
onuncatched
Deprecated. Use window.addEventListener('unhandledrejection')
Promise.on('error')
Deprecated. Use window.addEventListener('unhandledrejection')
This implementation executes a virtual Micro Task engine when possible, that replaces the need for calling setImmediate (), setTimeout(), etc.. This is needed only when dealing with indexedDB transactions in older browsers where native promises don't cope with indexedDB transactions See issue #317. It does this without sacrificing A+ compliance since the microtick engine can be considered part of the host system and is invisible and undetectable from the user.
Dexie.Promise can be used in conjunction with the standard Promise implementation in ES6 as well as Q- and other A+ compatible Promise implementations in both directions. It can also cope with simple in one direction.
Mix with any implementation:
The main reason for not using it within transactions is due to an . Another reason is that only Dexie.Promise has the capability to keep track of the currently executing transaction between calls (See Promise.PSD).
This implementation is a fork of promise-light () by - an A+ and ECMASCRIPT 6 compliant Promise implementation.
Modified by David Fahlander to be indexedDB compliant (See discussion: ).
This topic was also discussed in the following thread: .
See also