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


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM