我正在使用图形数据库和seraph-api库来访问它。我的问题是我正在尝试使用广度优先搜索进行异步图遍历。我将关系的数据点发送到前端客户端,但数据永远不会到达那里。我想知道我做错了什么。我知道有一些代码味道。我是节点的新手,并试图找出它。
注意:关系确实聚合到我设置的数组中,但它们不会传递给响应。
我的代码如下:
var addRelations = function(node_id, res){
var relations = [];
// Read the first node from the database
db.read(node_id, function(err, initNode){
var queue = [[initNode, 'out'], [initNode, 'in']];
// Create a While loop to implement depth first search
async.whilst(
function () { return queue.length > 0},
function (callback) {
var NodeandDir = queue.shift();
var node = NodeandDir[0]
var dir = NodeandDir[1];
// Lookup the relationships for the node in each direction
db.relationships(node.id, dir, 'flows_to', function(err, relationships){
//iterate through the relationships
if(relationships.length === 0 && queue.length === 0){
callback(err, relations)
}
_.each(relationships, function(relation){
var node2id;
relation.start === node.id ? node2id = relation.end : node2id = relation.start
//read the other endpoint
db.read(node2id, function(err, node2){
// push the coordinates to relations
relations.push([[node.lat, node.lng], [node2.lat, node2.lng]])
//add the new node to the queue with the relationships
queue.push([node2, dir])
})
})
})
},
function(err, relations){
console.log('Final Relations');
console.log(relations);
res.send(relations);
}
)
})
}
router.get('/:id', function(req, res, next) {
var node_id = req.params.id;
addRelations(node_id, res);
});
答案 0 :(得分:0)
我猜,你在_each之后没有调用“callback”,所以你的async while只会在
时迭代(relationships.length === 0 && queue.length === 0)
是真的。
并建议,不要将数据逻辑与快速http通信混合使用。在这种情况下,更好的决定是通过你的上层回调关系,它看起来像http控制器。