Как использовать функцию обратного вызова в функции .then () в Nodejs? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть nodejs модуль для извлечения данных из базы данных mongodb с использованием драйвера mongodb. Обратный вызов передается данной функции, которая возвращает обещание, но вместо возврата результата в функции .then () он передает значение в функцию обратного вызова. Как я могу вызвать эту функцию из другого модуля или функции, поскольку она не возвращает ее в .then ()? Я пытался утешить результат .then (), но он показывает неопределенное.

const MongoClient = require('mongodb').MongoClient;
const Db = require('../model/db');

Db.findUser = (details, callback) => {
    return dbconnection().then(db => {
        if (db) {
          return db.collection('users').findOne({
            email: details.email,
            pass: details.password
          }).then(data => {
            if (data) {
              console.log('Found one');
              callback(true);
            } else {
              let err = new Error();
              callback(err);
            }
          })
        }

Я использовал следующую функцию для вызова обещания. Я новичок в обещаниях.

var getUser = function(callback) {
  db.findUser().then(result => {
    console.log(result) // undefined
  })
}

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете легко сделать это, используя async/await. Примерно так:

Db.findUser = async (details, callback) => {
  const db = await dbconnection();
  const data = await db.collection('users').findOne({
    email: details.email,
    pass: details.password
  });

  if (data) {
    console.log('Found one');
    callback(true);
  } else {
    let err = new Error();
    callback(err);
  }

  return data;
}

и потреблять как:

const getUser = async (details, callback) => {
  const data = await Db.findUser();

  // do whatever you need with data  

  return data;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...