2017-06-14 127 views
1

我有一個函數,我正在調用SP來檢索細節。我的行[0]包含從SP檢索的所有數據。我需要返回這個值作爲函數的返回值。 但每次當我回到這個時候,我得到**如何從SP返回的函數中返回值?

不確定

**。

如何通過函數返回結果。 下面是我的代碼:

function GetBOMData(BOMName, params, notifySchneiderParam, res, cubicleType, cubicle) { 
     var ret; 
     connection.query('CALL ' + BOMName + '(' + params + ')', function (error, rows, result){ 
     ret= rows[0];  
    }); 
    return ret; 
} 

這是我如何打電話給我的功能:

function GetI06TIncomerBOM(cubicleType, body, res, userID, notifySchneiderParam) { 

var operatingVoltageUs = body.TechCharacteristics.OperatingVoltage ? parseFloat(body.TechCharacteristics.OperatingVoltage.replace("kV", "")) : 0; 
var packingType = body.TechCharacteristics.PackingType; 
var cableDeviceSelected = body.cubicleArray[0].grid.CableTestDevice; 
var door500MMSelected = body.cubicleArray[0].grid.depthdoor; 
var cableType = body.cubicleArray[0].grid.CableType ? body.cubicleArray[0].grid.CableType : null; 
var isNotifiedSchneider = notifySchneiderParam ? 1 : 0; 

var params = '"' + cubicleType + '",' + operatingVoltageUs + ',"' + packingType + '",' + 
    cableDeviceSelected + ',' + door500MMSelected + ',"' + cableType + '",' + userID + ',' + isNotifiedSchneider; 

// Sample SP call : call usp_GetI06TIncomerBOM("I06TIncomer",6,"LandPacking",1,1,"3x1C",5,0) 
var Test = GetBOMData('usp_GetI06TIncomerBOM', params, notifySchneiderParam, res, cubicleType, body.cubicleArray[0]); 
return res.json(Test); 

    } 
+0

當您調用SP時,您會異步獲取結果,但您的同步返回語句不會等待此操作,並會同步返回「undefined」。你需要一個回調來返回值。在您要調用此函數的位置發佈代碼,以便我可以發佈答案,以便如何使用回調獲得結果。 – Aruna

+0

我已經添加了關於如何調用此函數的代碼。 –

+0

我的問題是即使我編寫回調函數,函數的參數依賴於其他函數。因此,當我開始運行應用程序時,所有的參數值都是空的,因爲它首先觸發回調函數。 –

回答

0

您可以從GetI06TIncomerBOM傳遞一個回調函數GetBOMData下面給出。

您可以檢查這一點,並給予一試,

function GetBOMData(BOMName, params, notifySchneiderParam, res, cubicleType, cubicle, callback) { 

     connection.query('CALL ' + BOMName + '(' + params + ')', function (error, rows, result){ 
     if(error) { 
      callback(error); 
     } else { 
      callback(null, rows[0]); 
     } 
    }); 
} 

並改變GetI06TIncomerBOM這個如下,

function GetI06TIncomerBOM(cubicleType, body, res, userID, notifySchneiderParam) { 

var operatingVoltageUs = body.TechCharacteristics.OperatingVoltage ? parseFloat(body.TechCharacteristics.OperatingVoltage.replace("kV", "")) : 0; 
var packingType = body.TechCharacteristics.PackingType; 
var cableDeviceSelected = body.cubicleArray[0].grid.CableTestDevice; 
var door500MMSelected = body.cubicleArray[0].grid.depthdoor; 
var cableType = body.cubicleArray[0].grid.CableType ? body.cubicleArray[0].grid.CableType : null; 
var isNotifiedSchneider = notifySchneiderParam ? 1 : 0; 

var params = '"' + cubicleType + '",' + operatingVoltageUs + ',"' + packingType + '",' + 
    cableDeviceSelected + ',' + door500MMSelected + ',"' + cableType + '",' + userID + ',' + isNotifiedSchneider; 

// Sample SP call : call usp_GetI06TIncomerBOM("I06TIncomer",6,"LandPacking",1,1,"3x1C",5,0) 
var Test = GetBOMData('usp_GetI06TIncomerBOM', params, notifySchneiderParam, res, cubicleType, body.cubicleArray[0], function(err, result) { 
    if(err) { 
     return res.status(500).send(err); 
    } else { 
     return res.json(result); 
    } 
}); 

} 

注:我已經添加了錯誤處理爲好。