从模块的原型方法返回一个值,可以是同步的也可以是异步的

Returning a value from a prototype method of a module, synchronous or asynchronous?

本文关键字:同步 异步 也可以 一个 方法 原型 模块 返回      更新时间:2023-09-26

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

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

获取我想要做的:

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中同步吗?

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

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

问题是,在这个方法中,我试图从一个匿名函数(Array.forEach(function(){})) return,这当然不做任何事情,因为你不能停止forEach(),即使你可以,只会返回到正在进行的原型方法(在这种情况下,去下一行,每次简单的return false)。

因此,为了使其工作,我只需要做以下操作:

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

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

希望这是澄清一切