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的使用吧。


  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/wuxiang/p/4673553.html
Copyright © 2011-2022 走看看