2

我想使用 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);
});
4

1 回答 1

2

Your function test_arango_query doesn't use a callback. sync only works with functions that use a callback. It needs to know when the data is ready to return it from .sync(), if your function never calls the callback, then sync can't ever return a result.

Update your function to call a callback function when you want it to return:

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');
    });
}
于 2014-05-08T23:40:59.447 回答