使用nodejs中的Q传递对函数的全局引用

时间:2016-11-18 11:27:09

标签: node.js scope q

有人可以向我解释一下......拥有一个全局对象并使用下面的一些承诺。当我直接在函数中引用global时,引用是正确的。当我尝试传递参考时,它不是。

var globalObj = { ... }

function one() {
  var deferred = Q.defer();
  ...
  deferred.resolve();
  ...
  return deferred.promise;
}

function two {
  var deferred = Q.defer();
  ...
  deferred.resolve();
  ...
  return deferred.promise;
}

function doSomthing() {
  var ref = globalObj;    // this is ok

  ...
}


one().
  .then(two)
  .then(doSomething) // (1) this is ok it works

替代方案是......

var globalObj = { ... }

function one() {
  var deferred = Q.defer();
  ...
  deferred.resolve();
  ...
  return deferred.promise;
}

function two {
  var deferred = Q.defer();
  ...
  deferred.resolve();
  ...
  return deferred.promise;
}

function doSomthing(someRef) {
  var sref = someRef;     // someRef is []
  ...
}


one().
  .then(two)
  .then(doSomethhing(globalObj)) // (2) this is not ok does not work

请注意,列出了两个版本的代码我尝试过(1)没有引用,这很好,(2)传递引用,但事实并非如此。我不确定这是一个范围问题还是Q问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

one()
  .then(two)
  .then(doSomething(globalObj));

应该是

one()
  .then(two)
  .then(function () {
      return doSomethhing(globalObj);
  });

因为您不想立即致电doSomething() ,但这正是第一个变体所做的事情。