【问题标题】:Returning a value from a prototype method of a module, synchronous or asynchronous?从模块的原型方法返回一个值,同步还是异步?
【发布时间】:2015-08-30 14:54:40
【问题描述】:

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

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

得到我想要做的事情:

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 中同步?在我看来,它应该...

【问题讨论】:

    标签: javascript node.js asynchronous synchronous


    【解决方案1】:

    好的,在写这个问题时,我突然想到了我的错误所在:

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

    问题是在这个方法中,我试图从一个匿名函数(Array.forEach(function(){})return,这当然不会做任何事情,因为你不能停止 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)。

    希望这可以解决问题!

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2011-09-06
      • 2015-10-26
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多