3 ответов:
в основном при использовании Мангуст, документы могут быть получены с помощью помощников. Каждый метод модели, который принимает условия запроса, может быть выполнен с помощью
callbackилиexecметод.
callback:User.findOne({ name: 'daniel' }, function (err, user) { // });
exec:User .findOne({ name: 'daniel' }) .exec(function (err, user) { // });поэтому, когда вы не передаете обратный вызов, вы можете построить запрос и в конечном итоге выполнить его.
вы можете найти дополнительную информацию в Мангуст документы.
обновление
что-то отметить при использовании обещания в сочетании с Мангуст асинхронных операций является то, что Мангуст запросы не обещания. Запросы возвратить thenable, но если вам нужно реальные обещайте, что вы должны использовать
execметод. Более подробную информацию можно найти здесь.во время обновления я заметил, что не ответил явно вопрос:
Я никогда не видел этот метод в JavaScript раньше? Что он делает точно?
Ну это не собственный метод JavaScript, но часть API Мангуста.
Даниэль ответил на это довольно красиво. Чтобы получить исчерпывающий список способов построения и выполнения запросов, рассмотрим следующие варианты использования:
Построения Запросов
Мангуст не будет выполнять запрос, пока
thenилиexecбыл призван на него. Это очень полезно при построении сложных запросов. Некоторые примеры могут включать в себя использованиеpopulateиaggregateфункции.User.find({name: 'John'}) // Will not executeказнь через обратный вызов
хотя это не нравится многим из-за его вложенности, запросы могут выполняться путем предоставления дополнительного обратного вызова.
User.find({name: 'John'}, (err, res) => {}) // Will executeтогда API как обещания/A+
Мангуст запросы предоставляют
exec()возвращает обещание, если обратный вызов не предоставила. Таким образом, следующий шаблон очень удобен и универсален - он может обрабатывать обратные вызовы или обещания красиво:function findAll(query, populate, cb) { let q = Response.find(query); if (populate && populate.length > 0) { q = q.populate(populate); } // cb is optional, will return promise if cb == null return q.lean().exec(cb); }Я рекомендую использовать Bluebird обещания с Мангустом, чтобы сделать это, используйте этот вызов:
const mongoose = require('mongoose'); mongoose.Promise = require('bluebird');
Comments