如何在事件驱动编程中找到执行结束

时间:2011-08-24 10:40:16

标签: node.js event-handling

这是我的代码。

db.query(str, arr, function selectCb(error, results, fields) {
        if (error) {
            return proceed(false, {errno:'010',message:error.message}, request);
        }
        for (var i=0; i<results.length; i++) {
            // add the gib infor
            if (results[i].refertype=='G') {
                var input={};
                input.fields="*";
                input.gibname=results[i].refername;
                gib.getgibinternal(input, makeCallback(i));
                function makeCallback(index) {
                    return function(gresult) {
                        results[index].gib=gresult.data[0];
                        if (index==results.length-1) {
                            // becuase problem was comint in yapi enterothers  it give onlye one result of gib 
                            return proceed(true, results, request);
                        }
                    }
                }
                // add the user info        
            } else if(results[i].refertype=='U') {
                var input={};
                input.username=results[i].refername;
                input.fields="*";
                user.getuserinternal(input, makeCallbackuser(i));
                function makeCallbackuser(index) {
                    return function(gresult) {
                        results[index].user=gresult.data[0];
                        if(index==results.length-1) {
                            return proceed(true, results, request);
                        }
                    }
                }
            } 
        }
        if (results.length==0) {
            return proceed(true, results, request);
        }  

    });
});

这段代码中的问题是当我有5条记录的所有refertype G和5条refertype U记录时,这个函数返回而不等待用户数据来。

假设refeter类型G最后是,并且用户数据来自服务器,所以当最后一个G到达时,它返回没有用户数据。 我想要的是执行所有查询然后返回值,我该怎么做?

我如何等待用户数据来?

1 个答案:

答案 0 :(得分:0)

像async(https://github.com/caolan/async)这样的库有这样的帮手。查看文档,因为它们显示了一些不同的场景示例。