如何调用wait直到在节点js中执行函数

时间:2016-12-02 06:52:04

标签: node.js async-await mocha

我编写了一个函数,它使用mongoose删除mongodb中的数据并保存在单独的文件夹DB.js中,代码看起来像

delete_user : function(data) {
    connection.findOne({email:data}, function(err, result) {
        connection.findById(result.id, function(err, val) { 
            if(err) {
                throw err;
            }
            connection .findByIdAndRemove(val.id, function(err) {
                    if(err) {
                        throw err;
                    }
            });
        });
    });
},

连接mongodb所需的连接写在其他文件

在测试文件中(用mocha框架编写),我需要该文件并调用此函数

after('Flust out the created user', function(done) {
    Db.delete_user(req_body.email);
    console.log("User "+req_body.email+" deleted");
    done();
})

相同的代码使用两个不同的测试文件,例如a.test.js和b.test.js

当我使用mocha

运行测试文件时

它会抛出错误

Error: timeout of 10000ms exceeded. Ensure the done() callback is being called in this test.

在数据库中删除从文件a.test.js创建的用户 从文件b.test.js创建的用户不会被删除并抛出错误

1 个答案:

答案 0 :(得分:0)

在你的函数中添加回调:

delete_user : function(data, callback) {
connection.findOne({email:data}, function(err, result) {
    connection.findById(result.id, function(err, val) { 
        if(err) {
            throw err;
        }
        connection .findByIdAndRemove(val.id, function(err) {
                if(err) {
                    throw err;
                }
                return callback();
        });
    });
});
},

然后:

after('Flust out the created user', function(done) {
    Db.delete_user(req_body.email, function(){
        console.log("User "+req_body.email+" deleted");
        done();
    });
 })