Если Монго не предоставляет функцию ответа на обещание, то пообещайте эту функцию самостоятельно.Ни та оболочка, создающая обещание, ни анонимный обратный вызов, который он использует, не должны объявляться как асинхронные, но вызывающая сторона должна ....
function findById(collection, myId) {
return new Promise((resolve, reject) => {
collection.find({where: {id: myId}}, (err, results) => {
(err)? reject(err): resolve(results);
});
});
}
// now callers can use the async await pattern...
async someFunction() {
try {
let myId = // ...
let collection = // ...
let results = await findById(collection, myId);
// do something with results
} catch (err) {
// error
}
}
Ключевая идея заключается в том, что collection.find с обратным вызовом не подходит дляждать, потому что это не возвращает обещание.Функция анонимного обратного вызова, которую вы передаете ей, не является асинхронной функцией ... она выполняет свою работу сразу же, как только find вызывает ее обратно.Поэтому мы строим обещание на основе монго, а затем используем новый синтаксис async / await с этим обещанием.