zoukankan      html  css  js  c++  java
  • Node.js的函数返回值

    先看一段代码:

    function select(sqlscript){
        var result = "";
        sql.connect(config, function(err) {
            var request = new sql.Request();
            request.query(sqlscript, function(err, recordset) {
                result = recordset;
                console.log("AAA:"+result);
            });
            request.on('recordset', function(columns) {
                // Emitted once for each recordset in a query
            });

            request.on('row', function(row) {
                // Emitted for each row in a recordset
            });

            request.on('error', function(err) {
                // May be emitted multiple times
            });

            request.on('done', function(returnValue) {
                // Always emitted as the last one
            });
        });
        console.log("BBB:"+result);
        return result;
    }


     运行后可以看到, console.log("AAA:"+result); 这一句还是有值的,但是这一句console.log("BBB:"+result);  却是:BBB:undifined 。这是为什么呢?

     原来,

    一般按回调函数的逻辑,是先执行第一个console.log, 再执行第二个console.log, 但是中间一个回调函数, 比如 IO 操作其实还没执行 所以console.log执行的时候, 回调函数还没执行, 所以就没有返回值 等到数据库返回数据之后, return 的内容也就没有被捕获了,这就是异步特性带来的流程控制麻烦。

    所以, 

    用 Node 只能把后续的步骤写在回调函数里被继续调用和执行了 可以用 promise、 generator 之类方式弄更习惯的写法, 那就赶紧学习promise、generator的使用吧。


  • 相关阅读:
    No-3.Linux 终端命令格式
    No-2.常用 Linux 命令的基本使用
    No-1.文件和目录
    No-7.运算符
    No-6.If语句
    No-5.变量的命名
    YOLOv4详细分析 | 细数当前最佳检测框架小细节(附论文及源码下载)
    案例】S7-200SMART 实时时钟如何在MCGS触摸屏上显示并写入
    卡尔曼滤波:从入门到精通
    mmdetection最小复刻版(七):anchor-base和anchor-free差异分析
  • 原文地址:https://www.cnblogs.com/wuxiang/p/4673553.html
Copyright © 2011-2022 走看看