首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs中end事件的node-formidable

nodejs中end事件的node-formidable
EN

Stack Overflow用户
提问于 2014-11-17 15:09:01
回答 1查看 1.3K关注 0票数 0

我正在尝试将流数据写入我的数据库。下面是我的代码,其中作为输入的两个文件,我试图上传。这两个文件都保存在数据库中,但在所有数据库操作完成之前,会调用form.on("end")事件(第二个数据库调用)。

代码语言:javascript
复制
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')。这方面的任何帮助都将是非常有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2014-11-17 22:16:00

有助于您了解这两个事件发生的情况。==> dbapi有一个回调函数,该函数在为form.on触发'end‘事件之前不会返回/完成。

有很多方法可以满足你的需求,比如安排form.onPart和form.on串联运行--签出或者谷歌“节点中的串行异步控制流模式”。在不使用异步的情况下,下面的代码片段可能会解决您的问题:

代码语言:javascript
复制
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将是按照您所描述的顺序链接您正在处理的事件的一种优雅方式。

请参阅以下算法:

代码语言:javascript
复制
async.series([
   function1,
   function2
], callback)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26967322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档