2017-06-14 1 views
1

Ich habe eine Funktion, in der ich SP anrufe, um Details abzurufen. Meine Zeilen [0] enthält alle Daten, die von SP abgerufen werden. Ich muss diesen Wert als Rückgabewert einer Funktion zurückgeben. Aber jedes Mal, wenn ich diese Rückkehr, erhalte ich **Wie gibt man einen Wert von einer Funktion zurück, die von SP bezogen wurde?

undefined

**.

Wie gebe ich mein Ergebnis durch eine Funktion zurück. Unten ist mein Code:

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

Dies ist, wie ich meine Funktion nenne:

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

Wenn Sie den SP aufrufen, erhalten Sie das Ergebnis asynchron, aber Ihre synchrone Return-Anweisung wartet nicht darauf und gibt "undefined" synchron zurück. Sie benötigen einen Rückruf, um stattdessen den Wert zurückzugeben. Stellen Sie Ihren Code dort auf, wo Sie diese Funktion aufrufen, damit ich die Antwort posten kann, wie Sie das Ergebnis mit dem Rückruf erhalten können. – Aruna

+0

Ich habe Code hinzugefügt, wie ich diese Funktion anrufe. –

+0

Mein Problem ist, auch wenn ich eine Callback-Funktion schreibe, hängen die Parameter der Funktion von einer anderen Funktion ab. Daher, wenn ich die Anwendung starte, sind alle meine Parameterwerte Null, da sie zuerst die Callback-Funktion erreichen. –

Antwort

0

Sie einen Rückruf an die Funktion GetBOMData von GetI06TIncomerBOM wie weiter unten passieren kann.

Sie diese überprüfen und zu versuchen,

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]); 
     } 
    }); 
} 

Und GetI06TIncomerBOM wie unten dies ändern,

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); 
    } 
}); 

} 

Hinweis: Ich habe die Fehlerbehandlung ebenfalls hinzugefügt.

Verwandte Themen