Я хочу использовать NodeJS для чтения 60 тыс. Записей из базы данных MySQL и записи их в базу данных ArangoDB. Позднее я буду использовать функции агрегации ArangoDB и т. Д. Для обработки моего набора данных.NodeJS с arangojs и синхронизацией: все после .sync() игнорируется?
Исходя из 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);
});
Имеет смысл и был один легко исправить. Спасибо огромное! Ваше объяснение должно быть первым абзацем «sync' readme, действительно. Кажется, что не хватает основных примеров, которые фокусируются на основной концепции. – CoDEmanX
Интересно, почему NodeJS заканчивается сразу после запроса arangodb с использованием моего исходного кода. Если моя функция 'test_arango_query()' никогда не возвращается, и она называется синхронной, не должно ли это делать NodeJS навсегда? – CoDEmanX
@CoDEmanX Ваша функция возвращает. Он возвращается сразу же, путь до завершения запроса. Если вы хотите знать, когда эти данные готовы, вам нужно использовать «обратный вызов», и из-за этого я не думаю, что библиотека 'sync' много делает для вас. 'node.js' разработан как очень асинхронный, и это здорово! С языком, подобным PHP, у вас есть определенное количество процессов, скажем, 20, и если они все ждут ожидаемого медленного запроса, тогда другие виды использования не могут даже загружать простые страницы. – Paulpro