2017-03-02 16 views
0

おはよう!私はNode.jsとLoopbackをかなり使い慣れています。以下は私を夢中にさせている。ループバックでコールバックを実装する '保存する前に'フック

「保存する前に」モデルインスタンスに属性値を書きたいとします。私は呼び出しREST呼び出しから一つの値を取得する:

ctx.instance.hash

その後、私は、REST APIを呼び出して応答を取得し、モデルに値を記述する必要があります。 API呼び出しから値を取得することはできますが、別の関数から値を取得します。

しかし、私は次の操作を実行するために、元の関数のスコープに値を取得することはできません。

tx.instance.somedata = externalData;

私が試してみました: 1.このグローバルVAR作るが、元にその値は "undef"のままです。 2.無駄に値

の両方で「戻る」を行う - 値は「未定義」のまま

を私は変数が読み込まれることは決してありませんことを考えていた、と私はコールバックを使用する必要がありますが、私はこの場合コールバック関数をどのように実装するかは不明です。

ポインタや援助をいただければ幸いです。ありがとうございます!

module.exports = function(Blockanchor) { 

    Blockanchor.observe('before save', function GetHash(ctx, next) { 
    if (ctx.instance) { 
     //console.log('ctx.instance', ctx.instance) 
     var theHash = ctx.instance.hash; //NB - This variable is required for the external API call to get the relevant data 

     //Run below functions to call an external API 
     //Invoke function 
     ExternalFunction(theHash); 
     //See comment in external function, I do not know how to get that external variable here, to do the following: 
     ctx.instance.somedata = externalData; 

    } 
    next(); 
    }); //Blockanchor.observe 

}//module.exports = function(Blockanchor) 

Function ExternalFunction(theHash){ 
    //I successfully get the data from the external API call into the var "externalData" 
    var externalData = 'Foo' 
    //THIS IS MY PROBLEM, how do I get this value of variable "externalData" back into the code block above where I called the external function, as I wish to add it to a field before the save occurs 
} 

答えて

0

外部関数で約束を実装し、外部API呼び出しを待ってからresolveコールバックを使用して応答を返す必要があります。

module.exports = function(Blockanchor) { 

    Blockanchor.observe('before save', function GetHash(ctx, next) { 
    if (ctx.instance) { 
     //console.log('ctx.instance', ctx.instance) 
     var theHash = ctx.instance.hash; //NB - This variable is required for the external API call to get the relevant data 

     //Run below functions to call an external API 
     //Invoke function 
     ExternalFunction(theHash).then(function(externalData){ 
     ctx.instance.somedata = externalData; 

     next(); 
     }) 
    } else { 
     next(); 
    } 
    }); //Blockanchor.observe 

}//module.exports = function(Blockanchor) 

function ExternalFunction(theHash){ 
    return new Promise(function(resolve, reject){ 
     var externalData = 'Foo' 
     resolve(externalData) 
    }) 
} 
+0

ありがとう、カルロス! – Grahnite

0

OK、私が調査することができた何から、私は上記のが現実的な解決策を持っていないようだと、私のアプリの動作方法を変更する必要があります。

関連する問題