我正在尝试将流数据写入我的数据库。下面是我的代码,其中作为输入的两个文件,我试图上传。这两个文件都保存在数据库中,但在所有数据库操作完成之前,会调用form.on("end")事件(第二个数据库调用)。
var form = new formidable.IncomingForm();
form.onPart = function (part) {
// First DB call
var Obj = {
'DBName': 'FILEDB',
'collectionName': 'FILEDATA',
'fileName': "File1"
}
dbapi(part, Obj, function (err, result) {
if (err)
console.log(err)
else {
console.log(result);
}
})
}
form.on('end', function () {
// second DB call
});如何在所有form.onPart() DB调用完成后调用form.on('end')。这方面的任何帮助都将是非常有帮助的。
发布于 2014-11-17 22:16:00
有助于您了解这两个事件发生的情况。==> dbapi有一个回调函数,该函数在为form.on触发'end‘事件之前不会返回/完成。
有很多方法可以满足你的需求,比如安排form.onPart和form.on串联运行--签出或者谷歌“节点中的串行异步控制流模式”。在不使用异步的情况下,下面的代码片段可能会解决您的问题:
var form = new formidable.IncomingForm();
form.onPart = function (part) {
// First DB call
var Obj = {
'DBName': 'FILEDB',
'collectionName': 'FILEDATA',
'fileName': "File1"
};
dbapi(part, Obj, function (err, result) {
if (err)
console.log(err);
else {
console.log(result);
}
scheduleEndEvent();
});
};
function scheduleEndEvent() {
form.on('end', function () {
// second DB call
});
} 尝试上面的方法,看看它是否适用于您,但您真正需要的是很好地掌握Node中的控制流模式。
我可以确认,async.series将是按照您所描述的顺序链接您正在处理的事件的一种优雅方式。
请参阅以下算法:
async.series([
function1,
function2
], callback)https://stackoverflow.com/questions/26967322
复制相似问题