nodejs,mongodb-update,async,callback不被视为一个函数

时间:2014-11-11 23:36:04

标签: node.js mongodb asynchronous express asynccallback

我的代码存在问题。一切顺利,直到db.collection.update。

在console.log(n.6),回调不再被视为一个函数了。我不明白为什么。

控制台显示: 的回调(errorCode404) TypeError:object不是函数

var newData = req.body;
...
async.waterfall([
    function(callback){
        console.log('n3');
        db.getConnection(callback);
    },
    function(db, callback){
        console.log('n4');  
        db.collection('dossiers', callback);
    },
    function(dossiers, callback){
        console.log('n5');
        dossiers.update({'_id': mongodb.ObjectID(id)}, {$set:newData}, callback);
    },
    function(result, callback){
        console.log('n6');
        if(result != 1) {
            console.log('n6.1');
            callback(errorCode404);                         
        } 

        console.log('n6.2');
        callback(null, 'Dossier mise a jour.');

    }
], function(err, result){
    ...
});

有人能澄清一下吗?

1 个答案:

答案 0 :(得分:1)

发生的事情是update回调有三个参数:错误(如果有),修改的记录数和状态对象。 waterfall处理错误参数,但最后两个作为参数传递给后续waterfall函数(n6),回调作为第三个​​参数提供,而不是第二

因此,您需要将代码的这一部分更改为:

...
function(dossiers, callback){
    console.log('n5');
    dossiers.update({'_id': mongodb.ObjectID(id)}, {$set:newData}, callback);
},
function(numModified, status, callback){
    console.log('n6');
    ...