具有arangojs和sync的NodeJS:.sync()后的所有内容都被忽略了吗?

时间:2014-05-08 23:29:11

标签: node.js sync sequential arangodb

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

1 个答案:

答案 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');
    });
}