节点js中的异步函数处理

时间:2013-11-21 05:30:41

标签: javascript node.js

我在打印这两个陈述时面临一个问题,我有两个功能

var mongoose = require( 'mongoose' );
var_show_test = mongoose.model( 'test' );

exports.showTest = function(req,res) {
    var jsonString = [];

    var_show_test.find(function (err, testa) {
        console.log("In find");
    });

    console.log("In function");
}

但它按顺序打印语句

In function
In find

我想要的是按顺序打印语句,例如

In find
In function

我知道它是由于异步调用而发生的,我对回调函数有点困惑。如何处理这个以便按顺序打印语句。

1 个答案:

答案 0 :(得分:2)

对于初学者,如果您只是想登录控制台,那么您可以将第二个console.log放入回调 -

exports.showTest = function(req,res) {
    var jsonString = [];

    var_show_test.find(function (err, testa) {
        console.log("In find");
        console.log("In function");
    });
}

但是,如果你想在执行find回调后执行一个函数/方法,那么你需要在这里使用一个闭包 -

exports.showTest = (function (callback) {
    return function(req,res) {
        var jsonString = [];

        var_show_test.find(function (err, testa) {
            console.log("In find");
            callback();
        });
    }
})(callbackFunc);

function callbackFunc() {
    console.log('In my callback!');
}