我的代码中有snmp调用,并且在api调用中执行此操作并需要获取值数组并将其返回给客户端。但我在同步执行这行时面临问题,我的res.json在从session.subtree获取vales之前先执行
var shelf = new Array();
function doneCb (error) {
console.log("donecb");
console.log("shelf -----",shelf);
}
function feedCb (varbinds) {
console.log("feed cb");
shelf = [];
for (var i = 0; i < varbinds.length; i++) {
if (snmp.isVarbindError (varbinds[i]))
console.error (snmp.varbindError (varbinds[i]));
else {
var temp = varbinds[i].oid.trim(".");
shelf.push({'id':temp[temp.length-1], 'name':shelfmap[varbinds[i].value.toString()]});
console.log (varbinds[i].oid + "|" + shelfmap[varbinds[i].value.toString()]);
}
}
}
router.get('/getShelves/:r',function(req,res){
shelf = [];
session.subtree (oid, maxRepetitions, feedCb, doneCb);
res.json(shelf);
});
由于feedcb和donecb是net-snmp模块的内部方法,我无法重写函数来返回值,我尝试使用sync和async瀑布模型,但它不能正常工作,kinldy有人建议某种方式在节点JS中同步执行该方法。提前谢谢。