[英]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.