javascript - 从模块的原型(prototype)方法返回值,同步还是异步?

标签 javascript node.js asynchronous synchronous

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

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

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

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,即使它找到了所需的对象。

所以我的问题是:另一个模块的原型(prototype)方法在 NodeJS 中是否同步?在我看来应该...

最佳答案

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

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

问题是,在这个方法中,我试图从匿名函数(Array.forEach(function(){}))返回,这当然不执行任何操作,因为您无法停止 forEach(),即使可以,也只会返回到正在进行的原型(prototype)方法(在这种情况下,转到下一行并简单地返回 false 每次)。

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

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

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

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

希望这能解决问题!

关于javascript - 从模块的原型(prototype)方法返回值,同步还是异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297845/

相关文章:

javascript - 在谷歌地图上监听键盘事件

node.js - 我怎样才能解决这个问题? @ grpc/grpc-js仅适用于 Node ^ 8.13.0 || > = 10.10.0

node.js - 带有 NodeJS 模块的 VJET

node.js - 如何在restify中使用异步事件

javascript - 如何显示两天之间的表格行?

javascript - 如何从ajax响应中获取请求的url?

javascript - jQuery 插件 : variable scope issue between plugins

javascript - 我需要使用 Javascript 将信息更新到 JSON 文件

c# - 如何在 C# 中异步读取结束进程输出?

c# - `AsyncCallback` 和 `@object` 关于 .Net 中的委托(delegate)的目的是什么