热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node.js如何同步实现数据库读写与return

最近刚刚学习nodejs,想把数据库读写放在一个模块里方便使用。代码方法事从数据库中读取数据后返回,利用console打印测试。但是控制台打出了undefined,应该是因为方法异步的原因。请问

最近刚刚学习nodejs,想把数据库读写放在一个模块里方便使用。代码方法事从数据库中读取数据后返回,利用console打印测试。但是控制台打出了undefined,应该是因为方法异步的原因。请问如何能解决呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
search_flight=function (mdate,fc,des) {

    connection.query('select * from flight_info\n' +

        ' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {

            if (error) throw error;

        console.log(results[0]);

            return results;

        }

    );

};



console.log(search_flight(lmdate,lfc,ldes));





//控制台的打印

undefined

RowDataPacket {

  date: '2月8日',

  fight_number: 'NH885',

  time: '10:30',

  from_city: '浦东国际机场',

  to_city: '成田空港',

  number: 100

}

你需要理解Javascript的三种处理异步代码的方式,然后选择合适的方式:

  1. 回调

  2. Promise

  3. async/await

 

回调方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function search_flight(mdate,fc,des, callback) {

    connection.query('select * from flight_info\n' +

        ' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {

            if (error) throw error;

            console.log(results[0]);

            callback(results);

        }

    );

};



function test(){

    search_flight(lmdate,lfc,ldes, function(results){

        console.log(results);

    });

}



test();

 

Promise 方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function search_flight(mdate,fc,des) {

    return new Promise(function (resolve,reject){

        connection.query('select * from flight_info\n' +

                ' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {

                    if (error) reject({err:1, msg:error});

                    resolve({err:0, results});

                }

        );

    })

};



function test(){

    search_flight(lmdate,lfc,ldes).then(function (ret){

        if(!ret.err){

            console.log(ret.results)

        }

    });  

}



test();

 

异步函数方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
async function search_flight(mdate,fc,des) {

    return new Promise(function (resolve,reject){

        connection.query('select * from flight_info\n' +

                ' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {

                    if (error) reject({err:1, msg:error});

                    resolve({err:0, results});

                }

        );

    })

};



async function test(){

    let ret = await search_flight(lmdate,lfc,ldes);

    if(!ret.err){

        console.log(ret.results)

    }

}



test();



推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了如何在使用emacs时去掉ubuntu的alt键默认功能,并提供了相应的操作步骤和注意事项。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
author-avatar
五指间的节拍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有