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

标签 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 条引用类型 G 的记录和 5 条引用类型 U 的记录时,这个函数就返回而不等待用户数据到来。

假设引用器类型 G 最后到达,并且用户数据从服务器迟到,因此当最后一个 G 到达时,它会在没有用户数据的情况下返回。 我想要的是执行所有查询然后返回值,我该怎么做?

我如何等待用户数据到来?

最佳答案

像 async (https://github.com/caolan/async) 这样的库有针对此类事情的帮助程序。查看文档,因为它们显示了一些不同的场景示例。

关于node.js - 如何在事件驱动编程中找到执行结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174109/

相关文章:

javascript - 访问 app.locals 内的 req 和 res

node.js - 使用 Visual Studio 2015 在防火墙后面使用 npm

javascript - Azure 移动服务防止重复条目

node.js - 非法指令(核心转储)Node.Js

node.js - Express JS 与纯 Node.js - 性能基准?

c++ - 如何在 Windows 上的 C++ 控制台应用程序中捕获 ctrl-c 事件而不进入无限循环?

python - python 游戏中的房间/屏幕/菜单 Controller 问题 : old rooms are not removed from memory

javascript - 为什么不相关的元素会触发此点击事件?

javascript - Javascript 框架的自定义事件日志记录

javascript - 检测到双击事件时需要取消点击/鼠标弹起事件