有没有办法将变量传递给嵌套回调,而不会在不必要的情况下将它们传递给每个函数?问题是我需要调用getValueFromTable1来获取数据库的一个值。获取结果并从原始列表中添加另一个变量并将其发送到getValueFromTable2以从数据库获取第二条信息,然后最终从顶级函数获取带有userID的result2并使用它来执行数据库插入。
我知道我可以使用连接进行更复杂的数据库查询,这样我就可以立即获取所有信息然后只调用一个函数,但是我的" getValueFromTable1"和" getValueFromTable2"是通用函数,从数据库中获取一组数据,我可以在多个地方重复使用,因此我尝试这样做的原因。
我得到的问题是,当我调用时,节点JS没有范围内的itemList
itemList[i].item2
而且我没有将item2传递给function2,因为function2并不需要它用于它自己的目的,它会使它需要一个它不需要的变量。
doDatabaseInsert(itemList, userID) {
for(var i=0; i < itemList.length; i++) {
getValueFromTable1(itemList[i].item1, function(results) {
getValueFromTable2(results, itemList[i].item2, function(results2) {
//Finally do stuff with all the information
//Do DB insert statement with userID, and results2 into table 3
}
}
}
}
答案 0 :(得分:0)
您不能使用常规for循环执行此操作,因为您从异步回调中引用i
,其中i
的值已经是itemList.length
,因为for很久以前就已经完成了。
请改为尝试:
itemList.forEach(function(item) {
getValueFromTable1(item.item1, function(results) {
getValueFromTable2(results, item.item2, function(results2) {
//Finally do stuff with all the information
//Do DB insert statement with userID, and results2 into table 3
});
});
});