通过使用回调在节点js中全局访问变量

时间:2016-03-31 12:01:29

标签: php node.js callback

有没有办法使用callbacks来访问函数外部的结果或全局使用结果。 例如,

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

这里我需要在 php.decode_key 之外获得输出值。 任何人都可以帮助找到解决方案吗?

1 个答案:

答案 0 :(得分: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方法都在并行运行,他们不共享上下文(这是javascript,concurency模型的异步范例)),所以你在这个意义上可以做的是,在php.decode_key方法的回调中编写代码。

更简洁的方法是创建模块keydecoder.js并在主项目中异步使用它:

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