JS回调函数是异步调用 记录踩到的坑

匿名 (未验证) 提交于 2019-12-02 23:03:14

今天正好公司停电,放假一天,准备听课封装一下用nodejs操作 MongoDB数据库的方法来着,

然后我就掉坑里了

记录一下吧

首先说一下环境,我用的是nodejs 操作MongoDB数据库用的包是mongodb

第一步,按部就班的写一下,找到数据库和集合,准备操作;

 // 加载mongodb包 var mongodb = require("mongodb");  // 连接客户端 var mongoClient = mongodb.MongoClient;  // 准备地址 var url = "mongodb://127.0.0.1:27017";  // 连接客户端 mongoClient.connect(url, function (err, client) {      // 检测错误     if (err) {         console.log("** 数据库连接失败 **");     } else {         console.log("** 数据库连接成功 **");          // 操作         var db = client.db("db1811");               // 数据库         var collection = db.collection("person");   // 集合          // 增删改查操作          client.close();  // 关闭连接     } })

二、我将查询数据的方法,抽取出来了

方法说明:

参数1 是集合对象,也就是要查询的集合;

参数2 是查询的条件对象;

参数3 是连接到的客户端对象

我想的是,在调用我这个方法的时候,生成一个对象,然后不管查询的结果如何,都在我这个对象中有所体现

比如说,我查询失败,对象中就会存储失败的状态码和失败信息,成功的话就会存储成功的状态码和查询到的数据

如:

失败 - ret = {state:0 , content:" err信息 "}

成功 - 有数据 - ret = {state:1 , content : [{.. , ..}] }

然后在外边就可以根据返回的数据进行操作了;

 /**  * DataFind() 查询数据  * @param {*} collection    集合对象  * @param {*} data          查询条件  * @param {*} client        客户端对象  * 返回值是一个对象 {state:状态码 0-失败 1-成功,content:"错误原因/查到的数据"}   */ var DataFind = function (collection, data, client) {     var ret = {};     collection.find(data).toArray(function (err, result) {         if (err) {             ret.statea = 0;             ret.content = err;         } else {             if (result.length > 0) {                 ret.statea = 1;                 ret.content = result;             } else {                 ret.statea = 1;                 ret.content = "** 暂无数据 **";             }         }         client.close();     });     return ret; } 

使用如下:

打印出的结果如下:

没拿到数据;

我的分析如下:

我封装的方法里面用到的这个查询方法是异步执行的,也就是当我执行这个封装方法的时候,执行就直接

var ret = {};

return ret;

中间的代码,暂时没执行,因为同步代码和异步代码在一起的时候,先执行同步代码;

所以返回出来的是个空的对象,里边查询出来的数据是 undefined

然后,我这个问题现在还没解决,求大神解救;

跪谢 ! ! !

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!