繁体   English   中英

javascript:问题与原型功能

[英]javascript: issue with a prototype function

我在loopbackjs的上下文中使用此代码。 我想覆盖toJSON方法,以便根据调用者是否是对象的所有者返回不同的数据。

Model.prototype.toJSON = function() {
  var current = loopback.getCurrentContext();
  var obj = getAllData(this);
  if (!current) {
    logger.error("Can't get current context in prototype.toJSON. Ignoring and returning 'safe' info");
    return getSafeData(obj);
  }   
  var token = current.get("accessToken");
  if (!token) {
    logger.debug("Current context has no token, may be anonymous");
    return getSafeData(obj);
  }   
  this.owner(function(err, owner) {
    if (err) {
      logger.error(err);
      return getSafeData(obj);
    }

    if (token.userId == owner.id) {
      logger.debug(obj); //here the log shows the correct object
      return obj;
    } else {
      return getSafeData(obj);
    }
  }); 
}   

var getAllData = function(obj) {
  var json = {}; 
  for (var p in obj.__data) {
    json[p] = obj.__data[p];
  }   
  return json;
}   

var getSafeData = function(obj) {
  var json = {}; 
  for (var p in obj) {
     if (Model.settings.protected.indexOf(p)  >= 0) continue;
     json[p] = obj[p];
  }
  return json;
}

我的问题是,当不存在令牌(调用异常)时,代码不会进入异步owner函数,并且getSafeData(obj) ,从而在前端返回完整的对象。

但是,每当调用this.owner异步方法时,在前端我都会得到“无内容”。 但是在所有者检查之后,返回之前,记录器的调试输出将显示完整的对象。

我不知道为什么。 任何想法? 可以在异步调用this问题?

不幸的是,这令我震惊,因为我不应该将toJSON接口更改为接受回调,因为它可能已在整个框架中使用,这使我震惊。

但是-在这种情况下,我实际上不需要异步查询所有者对象。 我实际上只需要所有者的ID。

因此,只要做

if (token.userId == this.ownerId) {

代替

this.owner(...);

我得到了我所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM