2017-06-14 11 views
1

私は詳細を取得するためにSPを呼び出す関数を内部に持っています。私の行[0]には、SPから取得したすべてのデータが含まれています。この値を関数の戻り値として返す必要があります。私はこれを返しています しかし、それぞれの時間は、私は** **SPから取得した関数から値を返す方法は?

未定義

を取得しています。

私の結果を関数で返す方法。以下 は私のコードです:

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を呼び出すと、結果は非同期に取得されますが、同期戻りステートメントはこれを待機せず、同期して「未定義」を返します。代わりに値を返すにはコールバックが必要です。コールバックを使用して結果を得る方法を回答できるように、この関数を呼び出す場所にコードを投稿してください。 – Aruna

+0

この関数をどのように呼び出すかに関するコードを追加しました。 –

+0

私の問題は、コールバック関数を記述しても関数のパラメータが他の関数に依存することです。したがって、アプリケーションの実行を開始するときには、コールバック関数が最初にヒットするため、すべてのパラメータ値がnullになります。 –

答えて

0

下記の通りあなたはGetI06TIncomerBOMから機能GetBOMDataにコールバックを渡すことができます。

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

} 

注:私は、同様のエラー処理を追加しました。

関連する問題