Saya memiliki modul nodejs untuk mengambil data dari database mongodb menggunakan driver mongodb. Panggilan balik diteruskan ke fungsi tertentu yang mengembalikan janji, tetapi alih-alih mengembalikan hasil dalam fungsi .then(), itu meneruskan nilai ke fungsi panggilan balik. Bagaimana saya bisa memanggil fungsi ini dari modul atau fungsi lain karena tidak mengembalikannya di .then()? Saya mencoba untuk menghibur hasil .then(), tetapi itu menunjukkan tidak terdefinisi.

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);
            }
          })
        }

Saya telah menggunakan fungsi berikut untuk memanggil janji. Saya baru mengenal janji.

var getUser = function(callback) {
  db.findUser().then(result => {
    console.log(result) // undefined
  })
}
0
Nick 17 April 2020, 18:21

1 menjawab

Jawaban Terbaik

Anda dapat melakukannya dengan mudah menggunakan async/await. Sesuatu seperti ini:

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;
}

Dan konsumsi seperti:

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

  // do whatever you need with data  

  return data;  
}
1
alexortizl 17 April 2020, 16:36