When a callback is omitted from a DAO method, return a Promise that
resolves to the value normally passed to the callback of that method.
If a callback is provided, behave normally.
This API will use native ES6 promises if available. If not available,
or to force the use of another Promise library, you must assign the
global.Promise object.
e.g.:
global.Promise = require('bluebird')
Class methods affected:
- create
- updateOrCreate / upsert
- findOrCreate
- exists
- find
- findOne
- findById
- findByIds
- remove / deleteAll / destroyAll
- removeById / deleteById / destroyById
- count
- update / updateAll
Prototype methods affected:
- save
- delete / remove / destroy
- updateAttribute
- updateAttributes
- reload
Exceptions / edge cases:
- create() used to return the data object that was passed in, even if
no callback was provided. Now, if a callback is provided, it will
return the data object, otherwise it will return a Promise.
- If create() is provided an array of data objects for creation, it
will continue to always return the array. This batch creation mode
does not support promises.
- findOrCreate() has a callback of the form: cb(err, instance, created),
with the extra parameter indicating whether the instance was created
or not. When called with its promise variant, the resolver will
receive a single array parameter: [instance, created]
* Fix the idType so that it works with both MongoDB and RDBs (Raymond Feng)
* Tidy up tests so that they will work with RDBs (Raymond Feng)
* Fix JS style issues (Raymond Feng)
* Add a new property option `defaultFn` (Miroslav Bajtoš)
* Fix the null/undefined check (Raymond Feng)
* Fix createdAt type so that it won't overflow SQL server int (Raymond Feng)
* ModelBaseClass: promise mode for notifyObserversOf (Miroslav Bajtoš)
* ModelBaseClass: support promise-based observers (Miroslav Bajtoš)
* use lodash to update the findBelongsTo which now returns an array of matches (Bryan Clark)
* Add $now as shortcut default value for date property (Pradnya Baviskar)
* Fix `deleteById(id)` and other test failures (Miroslav Bajtoš)
The property allows developers to specify that the default value
should be retrieved via a named function.
Only two built-in functions are supported at the moment:
"guid", "uuid" - generate a new GUID/UUID
"now" - use the current date and time
Support for custom (user-provided) functions is not implemented yet.
Support both promise and callback styles in
ModelBaseClass.notifyObserversOf.
When there is no callback supplied, the method returns a promise that
is resolved (or rejected) with the result.
* Add an optional `options` argument to all CRUD methods (Raymond Feng)
* Upgrade deps (Raymond Feng)
* Remove workaround for perfomance degradation (Denis Bardadym)
* Change equal to eql to support mongodb ObjectID (Raymond Feng)
* Enhance the coercion for boolean/date types (Raymond Feng)
* Make sure base properties/settings are merged into the submodel (Raymond Feng)
* support optimized findOrCreate (Clark Wang)
* Fix the perf around should.not.equal for complex objects (Raymond Feng)
* testcase for #420 (Andrey Loukhnov)
* use findOrCreate in hasOne#create (Clark Wang)
* Create model foreign key matching type of opposite part of relation (even if it has a custom field type) (Andrey Loukhnov)
* minor formatting issues (trailing spaces and such) and .editorconfig (Andrey Loukhnov)
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
remove undefined for creating data in findOrCreate
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
getLastGeneratedUid instead of force an id
Signed-off-by: Clark Wang <clark.wangs@gmail.com>