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


 

转载于:https://www.cnblogs.com/wuxiang/p/4673553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值