3

我使用nodejs代码:

var ret = firstfunction();  //this calls database and gets some return value
var output = secondfunction(ret); // in this function we used ret as parameter 

firstfunction()完成之前,并且在它获得值“ret”之前,第二个函数使用参数“undefined”执行,因为“ret”尚不可用,导致错误。

只有在第一个函数完成执行后,我才能执行第二个函数。

var uname = "sachin";
var noqq=UserModel.find({uname:uname},function(err,user){
if(!err){
    myid=user[0]._id;  //SAVING myid here , I AM USING THIS IN THE NEX FUNCTION
    return myid;
}else { 
     return null;
    }
});

下面的函数应该只有在上面的一个完成之后才能执行,即只有在获得“myid”之后。

var ret=CollegeModel.findById(myid, function(err,colleges){
if(!err)
{
    res.send(questions);
}
else {
    res.send(err);
}
});

请告诉我实现我的代码的答案。谢谢

4

2 回答 2

2

使用 Node,你必须学会​​异步做事。您可以使用它的许多同步方法,但您会失去完全非阻塞的好处。

所以在不知道里面有什么的情况下firstfunction,你可能有一个异步方法。如果是这样,firstfunction则在返回异步方法之前返回(在内部,它甚至可能没有被调用)。您需要做的就是将您发送secondfunctionfirstfunction(). 最简单的方法是secondfunction作为参数传递给firstfunction. 您的代码将如下所示:

var firstfunction = function(myCallback) {
    var dbSuccessCallback = function(returedData) {
        // the asynchronous call has retured successfully with data

        myCallback(returnedData); 
    };
    callDatabase("SELECT a FROM b", dbSuccessCallback);
}


firstfunction(secondfunction);

如果您在 HTML 中进行事件绑定,您可能已经非常习惯这样做:

mydiv.addEventListener('click',function(){/* Do something */}, true);

或其他方式:

var myCallback = function(){
    /* Do something */
};
mydiv.addEventListener('click',myCallback, true);
于 2012-04-17T06:15:11.023 回答
0

查看 node-async 库,了解一些围绕常见模式的漂亮包装器,例如:https ://github.com/caolan/async

听起来系列或瀑布都适合您的用例。

于 2012-04-17T21:16:34.977 回答