使用arangojs和sync的NodeJS:忽略.sync()后的所有内容?

我想使用NodeJS从MySQL数据库读取60klogging,并将它们写入到ArangoDB数据库。 我会稍后使用ArangoDB的聚合function来处理我的数据集。

来自PHP,脚本通常运行同步,因为我相信这是有道理的,我最初(天真)的尝试是让我的NodeJS脚本也运行同步。 但是,它不能按预期工作:

我打印到控制台,通过.sync()调用函数连接到ArangoDB服务器,并打印所有现有的数据库,然后打印到控制台再次。 但是,对我的ArangoDB函数的同步调用之下的所有内容都被完全忽略(不会再打印到控制台,也不会在这里执行任何其他操作)。

我忽略了什么? 在.sync()调用的函数中, .done()是否会造成麻烦?

 var mysql = require('node-mysql'); var arango = require('arangojs'); //var sync = require('node-sync'); // Wrong one! var sync = require('sync'); function test_arango_query() { var db = arango.Connection("http://localhost:8529"); db.database.list().done(function(res) { console.log("Databases: %j", res); }); return "something?"; } sync(function() { console.log("sync?"); var result = test_arango_query.sync(); console.log("done."); // DOES NOT PRINT, NEVER EXECUTED?! return result; }, function(err, result) { if (err) console.error(err); console.log(result); }); 

您的函数test_arango_query不使用callback。 sync仅适用于使用callback的函数。 它需要知道什么时候数据准备好从.sync()返回它,如果你的函数从不调用callback,那么sync不能返回结果。

更新你的函数,当你想要返回时调用一个callback函数:

 function test_arango_query(callback) { var db = arango.Connection("http://localhost:8529"); db.database.list().done(function(res) { console.log("Databases: %j", res); callback('something'); }); }