Javascript 使用导入的自定义nodejs模块时未定义的结果
我试图通过电子邮件搜索本地数据库中的用户,但当我试图通过导入从不同的js文件引用这样做的函数时,我会得到未定义的结果。我已经在堆栈上搜索了一些关于我遇到的这个问题,并且听说了一些被称为回调的东西,这是我需要实现的东西吗?如果是的话,你能给我举个例子吗 提前谢谢 下面是我导出的代码(db.js文件): 下面是我调用导出的代码:(test.js)Javascript 使用导入的自定义nodejs模块时未定义的结果,javascript,node.js,Javascript,Node.js,我试图通过电子邮件搜索本地数据库中的用户,但当我试图通过导入从不同的js文件引用这样做的函数时,我会得到未定义的结果。我已经在堆栈上搜索了一些关于我遇到的这个问题,并且听说了一些被称为回调的东西,这是我需要实现的东西吗?如果是的话,你能给我举个例子吗 提前谢谢 下面是我导出的代码(db.js文件): 下面是我调用导出的代码:(test.js) 问题是JS是异步的,您可以像使用同步代码一样使用它 你能试试这个吗,应该可以: var neo4j = require('neo4j-driver'
问题是JS是异步的,您可以像使用同步代码一样使用它 你能试试这个吗,应该可以:
var neo4j = require('neo4j-driver').v1;
var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j"));
var session = driver.session();
const findEmail = (email, callback) => {
console.log('hi :', email);
session
.run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", {
email: email
})
.then((result) => {
let result_string = '';
result.records.forEach((record) => {
console.log(record._fields);
result_string += record._fields + ' ';
});
return callback(null, result_string);
})
.catch((e) => {
return callback('error : ' + JSON.stringify(e)));
})
}
module.exports = {
findEmail
};
然后在test.js中:
var tester = require('./db');
tester.findEmail("testemail@yahoo.com", (err, temp) => {
if (err) return console.error(err);
console.log(temp);
} );
这背后的想法是db文件中的所有流都是异步的
因此,为了捕获结果,您需要传递函数,
callback
,该函数将在反同步流完成时触发。请更精确一些。我可以看到几个可能出错的部分。哪个'result'是未定义的?感谢您的输入,我也不确定这是否有效,我在test.js'test'中添加了console.log,以确定控制台日志的打印位置。它会在test.js中打印未定义的内容,但之后会以某种方式打印用户信息。这是我的输出:嗨:testemail@yahoo.com(新行)在测试中未定义(新行)['Billy Bob','testemail@yahoo.com’,'928843.343432']我明白了,我现在要修改答案。是的,您需要传递回调,我刚刚将SolutionIon添加到未定义的exporeted模块,现在将添加回调:很快检查新代码(更正后我将发布)。JS中的代码是异步的。
var neo4j = require('neo4j-driver').v1;
var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j"));
var session = driver.session();
const findEmail = (email, callback) => {
console.log('hi :', email);
session
.run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", {
email: email
})
.then((result) => {
let result_string = '';
result.records.forEach((record) => {
console.log(record._fields);
result_string += record._fields + ' ';
});
return callback(null, result_string);
})
.catch((e) => {
return callback('error : ' + JSON.stringify(e)));
})
}
module.exports = {
findEmail
};
var tester = require('./db');
tester.findEmail("testemail@yahoo.com", (err, temp) => {
if (err) return console.error(err);
console.log(temp);
} );