2017-07-01 149 views
1

我想返回節點js中的數據庫值並作爲ejs文件中的變量傳遞。節點Js回調函數

波紋管是我使用的代碼。 它沒有返回值。

function getExternalLocation(cb) { 

    mssql.connect(msSqlSettings, function (err) { 
     if (err) { 
      cb(err); 
     }  
     var getQuery = "SELECT [Title] FROM [dbo].[StyleTemplates] " ; 
     //console.log(getQuery); 
     var request = new mssql.Request();   
     // query to the database and get the data 

     request.query(getQuery, function (err, rows) { 
      mssql.close(); 
      cb(err, rows);   
     }); 
    }); 
} 

exports.eejsBlock_editbarMenuLeft = function (hook_name, args, cb) { 
    var userData = getExternalLocation(args, function(err, rows) {}); 
    args.content = args.content + eejs.require(
     'ep_resources/templates/editbarButtons.ejs', { 
     userData: userData 
    }); 
    return cb(); 
}) 

userData沒有返回任何值。

+1

可能重複[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

+0

如果你不使用它,爲什麼要實現一個回調?小提示*行*包含你想要的 –

+0

基本上,我想返回數據庫存儲在「行」變量中的所有值。但是當我使用**返回行時,它不會返回任何值** – Sushil

回答

1
var userData = getExternalLocation(args, function(err, rows) {}); 

我不認爲userData會在異步函數中獲取正確的數據,因爲沒有等待,因此您可以嘗試在回調中獲取數據。

getExternalLocation(args, function(err, rows) { 
    var userData = rows; 
    args.content = args.content + eejs.require(
    'ep_resources/templates/editbarButtons.ejs', { 
    userData: userData 
    }); 
}); 
+0

如果可能,您可以給我一個示例代碼嗎? – Sushil

+0

答案是使用回調的示例代碼,如果您想使用async/await,則需要閱讀關於promise和async的ES6 api。 – Borkes