Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用导入的自定义nodejs模块时未定义的结果_Javascript_Node.js - Fatal编程技术网

Javascript 使用导入的自定义nodejs模块时未定义的结果

Javascript 使用导入的自定义nodejs模块时未定义的结果,javascript,node.js,Javascript,Node.js,我试图通过电子邮件搜索本地数据库中的用户,但当我试图通过导入从不同的js文件引用这样做的函数时,我会得到未定义的结果。我已经在堆栈上搜索了一些关于我遇到的这个问题,并且听说了一些被称为回调的东西,这是我需要实现的东西吗?如果是的话,你能给我举个例子吗 提前谢谢 下面是我导出的代码(db.js文件): 下面是我调用导出的代码:(test.js) 问题是JS是异步的,您可以像使用同步代码一样使用它 你能试试这个吗,应该可以: var neo4j = require('neo4j-driver'

我试图通过电子邮件搜索本地数据库中的用户,但当我试图通过导入从不同的js文件引用这样做的函数时,我会得到未定义的结果。我已经在堆栈上搜索了一些关于我遇到的这个问题,并且听说了一些被称为回调的东西,这是我需要实现的东西吗?如果是的话,你能给我举个例子吗

提前谢谢

下面是我导出的代码(db.js文件):

下面是我调用导出的代码:(test.js)


问题是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); 
} );