从模块的原型方法返回一个值,同步还是异步?

时间:2015-08-30 14:54:41

标签: javascript node.js asynchronous synchronous

我一直在编写一个模块来保存一个对象数组,当提供一个特定的值时,它应该返回其中一个。这是通过原型方法完成的,可以从需要它的其他模块调用。

我遇到的问题是,虽然这看起来像是一个同步方法调用,但返回的对象始终不是我期待的那个......

为了得到我想要做的事情:

var ModuleOne = function(){
  this.values = [];
}

ModuleOne.prototype.method = function(value){
  this.values.forEach(function(tempVal){
    if(tempVal.member === value){
      return tempVal;
    }
  });
  return false;
}

module.exports = Module;

当我从另一个模块调用此方法时,它总是返回false,即使它找到了所需的对象。

所以我的问题是:NodeJS中同步的另一个模块的原型方法是什么?对我来说似乎应该......

1 个答案:

答案 0 :(得分:1)

好的,在写这个问题时,我的错误就在于我:

基本上,回答原型方法是否同步的问题 - >是的,是的。

问题在于,在这种方法中,我尝试使用匿名函数return Array.forEach(function(){}),这当然不会做任何事情,因为你无法停止一个forEach(),即使你可以,也只会返回ongoin原型方法(在这种情况下,转到下一行,每次只需return false)。

因此,为了完成这项工作,我只需要执行以下操作:

ModuleOne.prototype.method = function(value){
  var found = false;

  this.values.forEach(function(tempVal){
    if(tempVal.member === value){
      found = tempVal;
    }
  });
  return found;
}

所以现在它应该正确地返回所需的对象(如果没有找到则为false)。

希望这可以解决问题!