关于Node.js等待异步返回结果的问题。

懂Node.js的大神帮忙解决各位问题吧!!问题:mysql查询数据的函数,返回查询结果,但由于query异步,因此该函数在未查询到结果前已经返回,代码如下:
function func_GetTableCount(tableName) {
var json = '';
if (connection != null) {

var sql = "SELECT * FROM " + tableName;
connection.query(sql, function (err, rows) {
if (err) {
console.log('Message:GetTableCount,False,SQL=' + sql);
console.log(err);
}
else {

connection.end();

json = JSON.stringify(rows);
console.log(json);

}
});
}

return json;
}
该函数始终返回空字符串!跪求大神帮忙。。。

1个回答

你都知道是异步的了,肯定是没执行query回调就已经return了,你的函数增加回调,而不是直接return

    function func_GetTableCount(tableName,callback) {
        var json = '';
        if (connection != null) {
            var sql = "SELECT * FROM " + tableName;
            connection.query(sql, function (err, rows) {
                if (err) {
                    console.log('Message:GetTableCount,False,SQL=' + sql);
                    console.log(err);
                }
                else {

                    connection.end();

                    json = JSON.stringify(rows);
                    callback(json);////////

                }
            });
        }

        //return json;
    }
    func_GetTableCount('表名', function (d) { alert(d) });//这样调用
    //而不是var d=func_GetTableCount('表名');alert(d)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
异步返回结果测试demo
import java.util.HashMap; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; im...
Node.JS中异步与同步
首先,你得知道阻塞(blocking)和非阻塞(non-blocking)有啥区别。 你可以把Node.js看做一个人+一个团队: JS的执行部分看做是一个人,叫它 a ; 调用libuv实现的IO操作的部分看做是一个团队,比如 arr ; a 只有他自己1个人(单线程),他同一时间内只能干一件事,这部分是阻塞的,一项工作(语句)执行完才能执行下一项,比如一个for循环: for(le...
Node.js封装异步API
Node.js中需要一个数据操作文件模块 这个模块不关心业务,只处理数据 比如students.js文件,封装students增删改查的API 这是Node.js的精华所在 封装之后,只需要在路由文件中直接调取就行 /* callback中的参数 第一个参数是err 成功是null 错误是错误对象 第二个参数是结果 成功是 数组 错误是 undefined return [] */ var fs=...
node.js的异步IO 第一篇
异步IO,事件驱动,单线程构成了node的基调,为什么异步IO在node中如此重要呢? 我们先来说一下异步的概念,异步常见于前端开发,例如ajax异步请求资源,如果前端页面同步请求资源,那麽当我们请求一个资源的时候,会阻塞代码往下执行,直到这个IO请求结束,那样用户就会发现页面卡死,点击事件等等失效,无疑这会使用户流失。 同样在运行服务端...
Node.js 异步流程控制
Node.js 异步流程控制异步流程控制对象async 串行无关联:async.series 并行无关联:async.parallel 串行有关联:waterfall parallelLimit:parallelLimit函数和parallel类似,但是他多了一个参数limit limit参数限制任务只能同时并发一定数量,而不是无限制并发 首先我们需要安装async模块: 我们来看看同步的情况:f
Node.js中的异步执行
刚看了一点马丁的《代码整洁之道》,于是心血来潮想把这几天做的Node联系进行一番代码重构,心里默念,高内聚低耦合,函数简洁明了,etc… 于是,在这段要读取本地文件内容的代码中,我将createServer后的回调printFile以及readFile后的回调getData都准备抽出来,并打算通过赋值的方式获取fileData,并最终将fileData打印到页面,代码如下://print_l
node.js 异步流程控制async
node.js其最大的优势在于高并发,而高并发的背后最核心的就是异步了。
Node.js学习笔记之异步执行流程
node.js异步执行流程
Node.js Promise异步流程控制
demo.js:'use strict' // 使用严格模式 ECMAScript5 (后端Node.js不需要考虑兼容性问题) // promise异步流程控制(避免异步回调函数的多层嵌套) (异步变同步) const fs = require("fs"); // promise底层实现原理。 var rf = function() { return new Promise...
node.js read异步与同步
read读取文件分两种方法:异步与同步异步:有回调函数,并且有两个反回值,err/data,处理数据在方法内同步:没有回调函数 ,并且方法名后加【Sync】var fs = require("fs");// 异步读取 此方法有回调// fs.readFile('json/chinaAdministrative/cities.json', function (err, data) {// i...
Node.js 异步异闻录
本文首发在个人博客:muyunyun.cn/posts/7b9fd… 提到 Node.js, 我们脑海就会浮现异步、非阻塞、单线程等关键词,进一步我们还会想到 buffer、模块机制、事件循环、进程、V8、libuv 等知识点。本文起初旨在理顺 Node.js 以上易混淆概念,然而一入异步深似海,本文尝试基于 Node.js 的异步展开讨论,其他的主题只能日后慢慢补上了。(附:亦可以把本文当...
Node.js异步漫谈
本文为饥人谷讲师若愚原创文章,首发于 前端学习指南。 使用 node,异步处理是无论如何都规避不了的点,如果只是为了实现功能大可以使用层层回调(回调地狱),但我们是有追求的程序员... 本文以一个简单的文件读写为例,讲解了异步的不同写法,包括 普通的 callback、ES2016中的Promise和Generator、 Node 用于解...
Node.js文件系统-同步和异步
同步和异步 所有的方法都有异步和同步的形式; 异步方法的最后一个参数都是一个回调函数。传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常,如果操作成功完成,则第一个参数会是null和undefined。 例子:目录fs/fs-1.js:   //导入fs模块 const fs = require('fs'); // 同步和异步 // ============例子1:实...
Node.js 异步非阻塞的回调函数
回调函数 异步 非阻塞
Node.js异步错误处理LAEH2.zip
LAEH2 ( Asynchronous Error Handling v2 for Node.js )是 Node.js 异步错误处理工具。 LAEH2 会存储回调线程的堆栈轨迹,这个堆栈轨迹会附加到回调中的主异常堆栈轨迹中,或者是把错误用异步函数进行回调。 LAEH2 会缩小显示堆栈轨迹,用可选选项隐藏  laeh2.js 框架本身和 Node.js 核心库文件;为减少重复的字符,可以用 /$/ 代替 /node_modules/ ,或者在堆栈轨迹中删除当前目录文件名的前缀。 标签:LAEH2
node.js 的异步模型
node.js 的异步模型 一、基本概念 阻塞式IO:cpu一直等到数据准备好了之后才会工作,即从函数调用开始,一直到数据准备好这段时间cpu是干等着的 非阻塞式的IO:数据准备好了之后发一个信号,此后cpu才会处理,即cpu不会干等着 阻塞式:相当于是轮训、非阻塞式相当于是中断 同步执行:语句的先后顺序就是cpu执行指令的顺序 异步执行:写在前面的语句...
Ajax等待返回结果时,
通过调用一个函数展示有好的动画效果 [html] view plain copy print? script type="text/javascript">        function test_ajax(){       $.ajax(       {          type:"GET",//通常会用到两种:GET,POST。默认是:GET        
做异步等待请求返回结果的时候禁止用户操作
想在做异步等待请求返回结果的时候禁止用户操作,像android那样出现一个模态的loading窗口rnrn大家给点思路吧。谢谢rn
关于数据库查询返回结果问题
现在我做查询数据库程序,查询到的结果需要放在一个相当于二维表的记录当中,本来用adodb.recordset集合不错,但是考虑到以后访问数据库方式改变的可能性,可能不用ado访问数据库,而recordset又不能自己添加生成,所以想找一种类似于recordset的结构,但是可以自己添加记录的记录结构,不知道有没有,请各位高手指教,感激不尽。
关于网络爬虫返回结果的问题
刚开始做网络爬虫,都很不熟悉,希望大家帮忙:rnrn[b]就是找一个比较新的技术的网页,比如纳米技术,然后把与这个技术相关的所有网页的URL都下载到本地,在这些URL之间寻找联系,比如1网页和2网页连接,就返回1,不连接就返回0,最后得到的结果是这些URL之间的关系矩阵 [/b]rnrn最主要的问题是,怎么返回一个矩阵。rnrn还有要实现这些功能用那个软件最好,.NET中的C#, JAVA,这两个我都学过,不知道用哪个更好些。。。rnrn拜托大家了。。
怎样等待异步Socket的函数返回结果再继续执行?
自己继承了一个异步SocketrnClass mySocket : public CAsnycSocketrn这样连接服务器rn mySocket.Connect("host",port);rnrn我想执行这一句以后等待socket连接上去host再继续执行后面的代码rn但是又不想用阻塞socket,因为等到连接完以后接下来立刻要发送数据rn如果放在OnConnect里面处理会变得很复杂rnrn能否用一个占用cpu资源比较低的循环(不使用timer)去检查socket是否连接上rn如果还没连接上就等待一段时间(不用Sleep,这个会使得界面没有响应) 再继续检查rn直到连接上去?rnrn
关于异步等待的问题,求求大家指点下
我的问题是要把多块表的抄表时间发到单片机上去,现在功能实现,比如我写入一个表具的抄表时间,成功后里面会反馈消息,我根据消息好做下一步处理,现在问题出在这块rnrn if (pCI != null&&model.Comm.ToString().Equals(pCI.PortNum.ToString()))rn rn Tools.ShowContentHint(string.Format("采集串口 " + pCI.PortNum.ToString() + " 开始初始化抄表 CDT编号:0 安装序号1",model.CdtNum,model.SerialNo));rn // 等待通道可利用rn while (!pCI.IsAvailable)rn rn Thread.Sleep(1000 * Config.SendInterval);rn rn pCI.IsAvailable = false;rn pCI.SPUnit.WaitEvent.Reset();rn pCI.SPUnit.SendData(InstructionSet.GetInitReadTimeCommandCmd(cdt, meter, model));rn if (!pCI.SPUnit.WaitEvent.WaitOne(6000, false))rn rn #region rn // 我的想法是发送后让线程等待6S,如果6S后还没接收完或没反馈就当超时处理,跟踪是有反馈的,就是进不来。rn // 我修改为WaitOne(-1, false)为无限等待也不行,主要对这WaitOne不理解,查了资料还不明白,所以请教大侠rnrn string pReturnStr = InstructionSet.ByteToHexString(pCI.SPUnit.pbReceiveArr, true);rn rn #endregionrn rn elsern rn Tools.ShowContentHint(string.Format("采集串口 " + pCI.PortNum.ToString() + " CDT编号:0 安装序号1 无应答反馈", model.CdtNum, model.SerialNo));rn rn pCI.IsAvailable = true;rn rnrn #endregionrn rn pCI.SPUnit.CloseComm();rn rnrnrnrn ============================================================= 调用部分=================================================================rn /// rn /// 发送抄表配置信息rn /// rn /// rn /// rn private void btnSendPlan_Click(object sender, EventArgs e)rn rn #regionrnrn if (this.dgvPlan.CurrentRow != null)rn rn int planId = PublicBasis.DataTypeHelper.GetInt(this.dgvPlan.CurrentRow.Cells["CPlanID"].Value);rn List details = new SC.SSH.BLL.BLLM_PlanDetail().GetModelList(string.Format("PlanId=0 and IsSend=0", planId));rnrn IList comms = new List();rn foreach (SC.SSH.Model.M_PlanDetail model in details)rn rn if (!comms.Contains(model.Comm.ToString()))rn rn comms.Add(model.Comm.ToString());rn rn rnrn // 初始化串口实例rn foreach (string comm in comms)rn rn SerialPortUnit serialPort = new SerialPortUnit("COM" + comm);rn Task pCI = new Task();rn pCI.PortNum = DataTypeHelper.GetInt(comm);rn pCI.SPUnit = serialPort;rn pCI.details = details;rnrn // 异步初始化抄表时间rn NewTaskDelegate pInitTime = new NewTaskDelegate(InitTime);rn IAsyncResult pInitTimeResult = pInitTime.BeginInvoke(pCI, null, null);rn rn rn elsern rn MessageBox.Show("请选择需要发送的计划");rn rnrn #endregionrn rnrn====================================================================这是我封装的一个任务类===================================================rn /// rn /// 抄表任务rn /// rn public class Taskrn rn /// rn /// 串口号rn /// rn public int? PortNum=null;rnrn /// rn /// 串口对象类rn /// rn public SerialPortUnit SPUnit;rnrn /// rn /// 计划从表rn /// rn public IList PlanDetails;rnrn /// rn /// 广播校时时间:00:10:00rn /// 当校时完毕后修改广播校时时间为下一天的00:10:00rn /// rn public DateTime BroadCastTime = PublicBasis.DataTypeHelper.GetDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:10:00")).AddDays(1);rnrn /// rn /// 下次读表时间,此时间是后台定时轮训时间rn /// 和抄表计划中的时间不同rn /// rn public DateTime NextTime = DateTime.Now;rnrn /// rn /// 下次轮训报警时间rn /// rn public DateTime NextCheckWaringTime = DateTime.Now;rnrn /// rn /// 串口是否可用rn /// rn public bool IsAvailable = true;rnrn /// rn /// 当前抄码对象rn /// rn public CurrPlanDetail CurrPlanDetail;rn rn /// rn /// 初始化CurrPlanDetailrn /// rn /// rn public CurrPlanDetail InitCurrPlanDetail(M_PlanDetail model)rn rn CurrPlanDetail cpd = new CurrPlanDetail();rn PublicBasis.DataTypeHelper.Clone(cpd.planDetail, model);rn return cpd;rn rnrn /// rn /// rn /// rn public List details;rnrn public List M_ControlPlanDetails;rn rnrnrn
Node.JS和Python 关于单线程和异步IO
Node.JS和Python 关于单线程和异步IO 很多人都说Python是伪多线程的, 其实是单线程的. Node.JS也是单线程的. 所以我就在网上搜了一下, 然后自己做对比整理. 这里只说结论,不说原因. Python Python其实是多线程的, 只是解释器有个GIL(Global Interpreter Lock),只能同时执行一个线程, 在Python2中,是执行1000...
关于邮件发送返回结果问题
rn MailAddress from = new MailAddress(ConfigurationSettings.AppSettings["PostAddress"]);rn MailAddress to = new MailAddress(this.GetMail.Value);rn MailMessage message = new MailMessage(from, to);rn rn message.Subject = "找回密码";rn string text = "用户:";rn text += "您好!";rn message.Body = text;rn message.IsBodyHtml = true;rn message.SubjectEncoding = System.Text.Encoding.Default;rn message.BodyEncoding = System.Text.Encoding.Default;rnrn SmtpClient client = new SmtpClient(ConfigurationSettings.AppSettings["PostService"]);rn System.Net.NetworkCredential smtpuserinfo = new System.Net.NetworkCredential();rn smtpuserinfo.UserName = ConfigurationSettings.AppSettings["Name"];rn smtpuserinfo.Password = ConfigurationSettings.AppSettings["Password"];rn client.Credentials = smtpuserinfo;rn client.Send(message);rnrn这是我发送邮件的代码。。我想问下。不知道能不能知道是否发送成功。就象163的邮件发送后会通知是否发送成功。rn不知道这怎么做的。谢谢了。rnrn
关于shellexeute()返回结果的问题
函数:rnvoid CSdadsDlg::OnButton1() rnrn // TODO: Add your control notification handler code herern ShellExecute(this->m_hWnd,"open", "ping.exe", "", "", SW_SHOWNORMAL);rn rnrnrn请问如何根据实现时ShellExecute执行ping 127.0.0.1的效果,rn并根据ping 的返回结果谈出不同的消息rn本人用HINSTANCE respone=ShellExecute(this->m_hWnd,"open", "ping.exe", "", "", SW_SHOWNORMAL);rnrnif (n>32)rn AfxMessageBox("success");rnelse rn AfxMessageBox("faiL");rnrn未能成功!!rn
异步等待
进程异步等待,不需要父进程阻塞等待,当子进程退出时会给父进程发送信号,父进程捕捉到信号,然后去执行信号处理函数,信号处理函数中调用waitpid等待子进程,完成回收,否则子进程会变成僵尸进程。#include <stdio.h> #include <stdlib.h> #include <signal.h> void handler(int sig) { waitpid(-1,NULL,1)
node.js 事件循环 异步IO 和 非IO异步
前些天略研究了一下node.js的异步原理,才对node 的处理异步机制有些了解,于是想着写篇博文,一是可以帮助正在学习的猿们,二是也可以巩固自己,如果本文有什么错误的地方,还请各位指出,我会加以改正。windows 的IOCP首先我得先简单的说一下windows下处理高并发的异步模型,它是一种通信模型,用来解决服务器高并发的一种技术,它就是IOCP(I/O Completion Port)IO完成
Ajax异步等待/jquery异步等待
jquery+strtus 带有等待动画显示,里面的注释很详细,等待时可以指定锁定区域和锁定起始位置,也可以全屏锁定。 还有一点注意:由于上传代码匆忙,忘记一处,// 解锁 bgObj.onclick = function() { new screenClass().unlock(); } 这处代码要删除,不然锁不住,看清了,别删错了。 切记,切记……
有关Node.js异步代码执行时机的问题
nodejs和浏览器端的js其实都有一个事件循环,从这个简单的例子来分析 var fs = require(‘fs’); fs.readFile(’/etc/passwd’, (err, data) =&amp;gt; { if (err) throw err; console.log(data); });执行fs.readFile,node一共完成两个操作, 1.启动os层的read操作, 2.往nod...
从头开始讲Node.js——异步与事件驱动
自从Node.js出来之后,火得一塌糊涂,前端程序员在学,后台程序员也在学。 很久之前试着用node+express+mongoDB搭建过一个小型的网站,然后心得体会都写在了这几篇博客中: MongoDB学习笔记之Mongoose的使用 javascript笔记之express初体验 Express中使用Jade nodejs实战之简单实现服务器端(顺便讲一下URL) Nodej
深入浅出Node.js - 异步I/O
异步I/O 异步I/O与非阻塞I/O 从计算机内核I/O而言,同步/异步和阻塞/非阻塞是两个不同的概念。 操作系统内核对于I/O只有两种方式,阻塞和非阻塞。 阻塞I/O的特点是调用之后一定要等到系统内核层面完成所有操作后,调用才结束,阻塞I/O造成了CPU等待I/O,浪费了CPU的处理能力。非阻塞I/O与阻塞I/O的区别是调用之后会立即...
Node.js-opencv4nodejs-用于node.js的异步OpenCV3.xAPI
用于node.js的异步OpenCV 3.x API,包含以下示例:人脸检测,机器学习,深度神经网络,手势识别,对象跟踪,特征匹配,图像直方图
node.js教程13_异步流程控制(下)
本课程从Node.js的安装配置开始,包括函数调用,模块调用,路由,文件操作,异常处理,参数接收,正则表达式,连接数据库,事件等内容,使学员通过十六课时,学习Node.js的基础知识,掌握JS开发服务端的编写方法,了解Node.js的运行机制,为深入学习后期各类框架打好基础。
Node.js多个异步回调的处理
问题经常有人在问,多个ajax请求,怎么在请求都结束之后再处理数据。这个问题在做前端的时候,我没遇见过。但是最近在做node后端的时候,遇见了:就是node后端发送多个网络请求,要在请求结束之后再处理数据,这里和ajax的那个问题是一样的。解决这里使用了一个依赖包async。 关于他的使用这里可以看文档即可。这里使用了一个each。 实例添加依赖var request = require('re
Node.js异步I/O,事件驱动
文章原文: https://yq.aliyun.com/article...本文相对于原文有部分修改 前言 Node.js以高效,轻量著称,具有非阻塞I/O,事件驱动的特性.非阻塞I/O很浅显的解释就是: 代码以单线程的方式执行,在遇到I/O操作时Node会开辟新的线程去执行I/O操作,主线程代码继续执行.事件驱动很浅显的解释就是: 事件...
Node.js 异步流程控制,回调函数嵌套
-
关于如何等待ajax返回结果的一个问题,高手请支招
这么个情况:rnrnfuntion test()rnrn do_ajax();//call url,and process return values in function processor()rn return true/false;rnrnrnfunction processor()rnrn //process,return true/flasernrnrnrn需要在test方法里面返回一个true或者false,结果根据 processor()返回的结果返回rnrn这个能实现吗?rn
关于Socket建立连接时,程序等待没有返回结果的问题
小弟在编一个Socket的程序,连接远程的服务器,发送并接收数据,每次发送一组数据,接收一组数据之后断开连接,随后重新建立(对方服务器这样要求的),使用如下框架:rntryrnrn for(...)rn rn client = new Socket(ip,port);rn System.out.println("connected!");rn out.println(str);rn out.flush();rn inLine=in.readLine();rn while( inLine!=null )rn rn System.out.println(inLine);rn rn client.close();rn System.out.println("closed!");rn rnrncatch(Exception e)rnrn System.out.println(e.toString());rn return null;rnrn但,不知是网络不稳定还是对方的服务器不稳定,有的时候循环执行10次都没有问题,有的时候循环执行2、3次之后就没有反应了,程序输出closed!之后就停了,没有继续输出connected!程序应该是停在了client = new Socket(ip,port);这行。rn看了相关的教材,有的文章介绍了设置连接超时,但都是在建立连接之后设置,我在建立连接的时候就没有过去。请教如何解决这样的问题,让建立连接这一步超过2秒之后就跳过去。rn非常感谢。
等待返回结果:Callable、Future和FutureTask
https://www.cnblogs.com/xiaoxi/p/8303574.html
用remote-object时等待返回结果
我在as中调用remote object对象,使用了一个responder监听事件,并在event中返回结果。现在问题是,结果在处理事件函数中可以得到,但在得到之前就被另一个函数返回了(自然是null)。代码如下:rnpublic function test():Stringrnrnvar responder:Responder= new Responder(testResult, testFault);rnvar call:AsyncToken= connector.test();rncall.addResponder(responder);rntrace(teststr);rnreturn teststr;rnrnrnprivate function testResult(event:ResultEvent):voidrnrnteststr= event.result.toString();rntrace(teststr);rnrnrn结果是第一个函数比第二个函数先返回。trace先输出null,再输出"test";rn另一个帖子里问到这是因为flex是异步执行的,但是我把remote-object对象的concurrency改成了single还是没有用。请问怎么让它等调用时等待直到结果返回,难道只能循环判断等待?
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件