如何在 Nodejs 的 .then() 函数中使用回调?
How to use callback in .then() function in Nodejs?
我有 nodejs 模块可以使用 mongodb 驱动程序从 mongodb 数据库中获取数据。回调被传递给 return 一个承诺的给定函数,但不是 return 在 .then() 函数中产生结果,而是将值传递给回调函数。我如何从其他模块或函数调用此函数,因为它不是 return 在 .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);
}
})
}
我使用了以下函数来调用 promise。我是新手。
var getUser = function(callback) {
db.findUser().then(result => {
console.log(result) // undefined
})
}
您可以使用 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;
}
我有 nodejs 模块可以使用 mongodb 驱动程序从 mongodb 数据库中获取数据。回调被传递给 return 一个承诺的给定函数,但不是 return 在 .then() 函数中产生结果,而是将值传递给回调函数。我如何从其他模块或函数调用此函数,因为它不是 return 在 .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);
}
})
}
我使用了以下函数来调用 promise。我是新手。
var getUser = function(callback) {
db.findUser().then(result => {
console.log(result) // undefined
})
}
您可以使用 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;
}