对于节点中的npm模块,尝试让这些函数同步执行:saveFlightDetails需要先完成saveFlight,然后需要saveItem首先完成...这三个函数的每一组都需要在循环迭代之前完成到下一组数据。
我有一个for循环,其中包含以下代码,我的数据集迭代两次(2次飞行)。
function saveData(app, data, i){
var Item = app.get('models').Item;
var Flight = app.get('models').Flight;
var FDeparture = app.get('models').FDeparture;
var FArrival = app.get('models').FArrival;
var currentItem = [],
currentFlight = [];
wait.for(saveItem, data, Item, i, currentItem, currentFlight);
console.log('currentItem: ' + currentItem);
wait.for(saveFlight, data, Flight, i, currentItem, currentFlight);
console.log('currentFlight: ' + currentFlight);
wait.for(saveFlightDetails, data, FDeparture, FArrival, i, currentItem, currentFlight);
}
wait.launchFiber(saveData, app, data, i);
和saveItem,saveFlight和saveFlightDetails转到将数据保存到db的其他函数。这是saveItem,但其他看起来非常相似:
function saveItem(data, Item, i, currentItem, currentFlight){
console.log('Entered item function.');
Item.create({
...
}).success(function(item){
console.log('Created item.');
currentItem = item;
});
}
由于某些我似乎无法解释的原因,循环按预期迭代两次,但输出为:
Reached saveItem function.
Reached saveItem function.
Item saved.
Item saved.
saveFlight和saveFlightDetails函数不会与currentItem和currentFlight的console.logs一起被调用,但是saveItem正确运行...
我认为这会调用saveItem并等到它完成,然后调用saveFlight并等待,然后调用saveFlightDetails并等待。然后迭代。我做错了什么?
感谢您的帮助
答案 0 :(得分:0)
好的,我找到了答案。对于那些可能觉得有用的人来说,因为在wait.for上没有很多示例文档,我需要创建更多的光纤。因此,不是让一个光纤用于一个函数saveData,而是3个wait.for中的调用,我需要3个光纤,每个光纤都有自己的功能,每个光纤都有一个wait.for调用。 Psuedocode如下:
function save1(args){
wait.for(asyncfunction1, args);
console.log('save1 done.');
}
function save2(args){
wait.for(asyncfunction2, args);
console.log('save2 done.');
}
function save3(args){
wait.for(asyncfunction3, args);
console.log('save3 done.');
}
wait.launchFiber(save1, app, data, i);
wait.launchFiber(save2, app, data, i);
wait.launchFiber(save3, app, data, i);