我想使用NodeJS从MySQL数据库中读取60k记录并将它们写入ArangoDB数据库。我稍后将使用ArangoDB的聚合功能等来处理我的数据集。
来自PHP,脚本通常运行同步,因为我相信这里有意义,我的初始(天真)尝试是让我的NodeJS脚本也运行同步。但是,它没有按预期工作:
我打印到控制台,通过.sync()
调用函数连接到ArangoDB服务器并打印所有现有数据库,然后再次打印到控制台。但是在我的ArangoDB函数的同步调用之下的所有内容都被完全忽略(不会再次打印到控制台,也不会在此处执行任何其他操作)。
我在俯瞰什么?通过.done()
调用的函数中的.sync()
会导致问题吗?
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);
});
答案 0 :(得分:2)
您的函数test_arango_query
不使用回调。 sync
仅适用于使用回调的函数。它需要知道数据何时准备好从.sync()
返回,如果你的函数从不调用回调,那么sync
就不能返回结果。
更新您的函数以在需要它时返回时调用回调函数:
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');
});
}