2016-03-31 4 views
1

callbacksを使用して、関数外の結果にアクセスしたり、結果をグローバルに使用する方法はありますか。例えば 、コールバックを使用してノードjsの変数にグローバルにアクセスする

execPhp('sample_php.php', function(error, php, outprint){ 
    php.decode_key(fromUserId, function(err, fromId, output, printed){}); 
}); 

は、ここで私はphp.decode_key出力値を取得する必要があります。 誰でもソリューションを見つけるのに役立つことができますか?

+0

そして、何の問題があります、あなたは 'php-exec'モジュールを使用しているようですが、私はこのことはうまくいかないと思っています。何かエラーが出ますか? –

+0

これは完璧に動作しますが、私はphp.decode_key(fromUserId、function(err、fromId、output、printed){ })の外部に出力が必要です。 –

答えて

0

Ideeaはあなたがコールバックの外fromIdを使用することができないということです、(このコードはchild-processを産卵され、彼は他の実行スレッドで、メインコードの並列でそれを実行します。)非同期的に計算され 一般的な例彼らはノードに実行したときにPHP開発者の使用には、以下のいずれかです。

var globalVar; 
execPhp('sample_php.php', function(error, php, outprint){ 
    php.decode_key(fromUserId, function(err, fromId, output, printed){ 
     globalVar = fromId; 
    }); 
}); 

はすべてasync方法を起こし、動作しません、これはジャバスクリプトのasyncrhonousパラダイムである(彼らはコンテキストを共有しないparalellにrunnedされていますconcurency model))ので、この意味でできることは、php.decode_key methのコールバックにコードを書くことですod。

きれいな方法は、クレタ島にモジュールkeydecoder.jsこととあなたの主なプロジェクトでasynchornouslyそれを使用することができます。

//keydecoder.js 
var execPhp = requiere('exec-php'); 

module.exports = function(fromUserId, cb) { 
    execPhp('sample_php.php', function(error, php, outprint) { 
    if (error) { 
     cb(error); 
    } else { 
     php.decode_key(fromUserId, function(err, fromId, output, printed) { 
     cb(err, fromId); 
     }); 
    } 
    }); 
}; 

を、あなたがこの方法でそれを使用することができます。

var keyDecoder = require('../modules/keydecoder'); 

keyDecoder(fromUserId, function(err, result) { 
    //use in main code 
}); 
関連する問題