Обещания
Встроенные обещания
Асинхронные операции Mongoose, такие как .save() и запросы, возвращают thenable. Это означает, что вы можете делать такие вещи, как MyModel.findOne({}).then() и await MyModel.findOne({}).exec(), если используете async/await.
Вы можете найти тип возвращаемого значения для конкретных операций в документации API. Вы также можете узнать больше о обещаниях в Mongoose.
const gnr = new Band({
name: 'Guns N\' Roses',
members: ['Axl', 'Slash']
});
const promise = gnr.save();
assert.ok(promise instanceof Promise);
promise.then(function(doc) {
assert.equal(doc.name, 'Guns N\' Roses');
});
Запросы не являются обещаниями
Запросы Mongoose являются не обещаниями. У них есть функция .then() для co и async/await в качестве удобства. Если вам нужно полноценное обещание, используйте функцию .exec().
const query = Band.findOne({ name: 'Guns N\' Roses' });
assert.ok(!(query instanceof Promise));
// A query is not a fully-fledged promise, but it does have a `.then()`.
query.then(function(doc) {
// use doc
});
// `.exec()` gives you a fully-fledged promise
const promise = Band.findOne({ name: 'Guns N\' Roses' }).exec();
assert.ok(promise instanceof Promise);
promise.then(function(doc) {
// use doc
});
Запросы являются thenable
Хотя запросы не являются обещаниями, запросы являются thenable. Это означает, что у них есть функция .then(), поэтому вы можете использовать запросы как обещания с помощью цепочки обещаний или async await
Band.findOne({ name: 'Guns N\' Roses' }).then(function(doc) {
// use doc
});
Нужно ли использовать exec() с await?
Существует два варианта использования await с запросами:
await Band.findOne();await Band.findOne().exec();
Что касается функциональности, эти два варианта эквивалентны. Тем не менее, мы рекомендуем использовать .exec() , так как это дает вам лучшие трассировки стека.
const doc = await Band.findOne({ name: 'Guns N\' Roses' }); // works
const badId = 'this is not a valid id';
try {
await Band.findOne({ _id: badId });
} catch (err) {
// Without `exec()`, the stack trace does **not** include the
// calling code. Below is the stack trace:
//
// CastError: Cast to ObjectId failed for value "this is not a valid id" at path "_id" for model "band-promises"
// at new CastError (/app/node_modules/mongoose/lib/error/cast.js:29:11)
// at model.Query.exec (/app/node_modules/mongoose/lib/query.js:4331:21)
// at model.Query.Query.then (/app/node_modules/mongoose/lib/query.js:4423:15)
// at process._tickCallback (internal/process/next_tick.js:68:7)
err.stack;
}
try {
await Band.findOne({ _id: badId }).exec();
} catch (err) {
// With `exec()`, the stack trace includes where in your code you
// called `exec()`. Below is the stack trace:
//
// CastError: Cast to ObjectId failed for value "this is not a valid id" at path "_id" for model "band-promises"
// at new CastError (/app/node_modules/mongoose/lib/error/cast.js:29:11)
// at model.Query.exec (/app/node_modules/mongoose/lib/query.js:4331:21)
// at Context.<anonymous> (/app/test/index.test.js:138:42)
// at process._tickCallback (internal/process/next_tick.js:68:7)
err.stack;
}
Хотите узнать, как проверить, работают ли ваши любимые модули npm с async/await, не собирая противоречивые ответы из Google и Stack Overflow? Глава 4 Mastering Async/Await объясняет основные принципы определения того, поддерживают ли такие фреймворки, как React и Mongoose, async/await. Получите вашу копию! <img src="data:image/png;base64,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
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/promises.html