我正在尝试将流数据写入我的数据库。下面是我的代码,其中输入两个我试图上传的文件。这两个文件都保存在DB中,但在所有数据库操作完成之前,会调用form.on(“end”)事件(第二个DB调用)。
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()数据库调用之后调用form.on('end')。任何有关这方面的帮助都会非常有用。
答案 0 :(得分:0)
有助于您了解这两个事件的情况。 ==> dbapi有一个回调函数,它不会在'结束之前返回/结束。 form.on。
触发事件有很多方法可以满足您的需求,例如:调度form.onPart和form.on以串行方式运行 - 在Node"中检出或google"系列异步控制流模式。如果不使用异步,下面的代码段可以解决您的问题:
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)