b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

dat视频文件如何打开方式 Node.js+MongoDB的环境搭建+学习实例(7)

电脑杂谈  发布时间:2018-02-13 00:18:13  来源:网络整理

增删改和页面的jquery之类的没啥好说的,跟前台开发差不多,详细说一下在find.js中遇到的问题。

初用nodes.js的时候可能对异步调用的处理顺序有点不太习惯。

比如我在接口中,一开始是这样写的:

router.get('/find', function(req, res, next){

    var params = URL.parse(req.url, true).query;

    MongoClient.connect(DB_CONN_STR, function(err, client) {
        console.log("连接成功!");
        selectData(client, params, function(result) {
        });
    });
    
    res.send(JSON.stringify(result));

    client.close();
    console.log("连接断开!");
})

想象中的输出结果:

连接成功!

连接断开!

本以为它会在MongoClient.connect中的处理权都执行完以后,再断开连接,可实际显示的是:

连接断开!

连接成功!

由此想到,原来node.js在调用其他线程时,不是等待他们执行完,而是做自己的下一步,等到其他线程的处理完成后,再去调用回调函数。

简单的处理当然没问题,但是遇到复杂的循环调用其他线程时,就很麻烦了。

比方说在find.js中,我需要将test中的name和age取到以后,再循环所有数据,以name为key,去检索other并取出job后一起返回,不可能是每次检索都去调用callback回调函数。

因此我用到了async中的map函数。

安装async的命令:

npm install --save -dev async;

async库的命令的解析可以参照这篇文章:

我这里用到了map方法,map内循环的结果以数组形式保存后,一并返回给callback。

async.map的使用:

            // async.map会将循环处理完以后,统一执行callback而不像其他异步调用执行分别执行
            async.map(arr, function(item, callback){
                var whereStr = {"name": item.name};
                collectionOther.find(whereStr, function(error, result){
                    result.toArray(function(err, arrJob){
                        console.log(arrJob);
                        console.log("------------------------");
                        if (arrJob){
                            item.job = arrJob[0].job;
                            console.log(item);
                            console.log("*************************");
                        }
                        callback(null, item);
                    });
                })
            }, function(err, result){
                // result是上表面item组成的数组
                callback(result);
            })


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-74442-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...