0
我在loopbackjs
的上下文中使用此代碼。 我想覆蓋toJSON
方法以便返回不同的數據,具體取決於調用者是否是對象的所有者。javascript:使用原型函數的問題
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;
}
我的問題是,當令牌不存在(anonoymous調用),代碼不進入異步owner
功能,getSafeData(obj)
被調用,在前端返回完整的對象。
但是,無論何時調用this.owner
異步方法,在前端我都會得到「無內容」。但是,在返回之前,所有者檢查之後,記錄器調試輸出會顯示完整的對象。
我不知道爲什麼。任何想法? this
上的異步電話會成爲問題嗎?
寫「無內容」的代碼在哪裏? – thefourtheye
是的,確切地說,調用'this.owner'函數的結果是什麼'this.owner'函數返回=不是this.owner中調用的異步函數返回 –
@JaromandaX我不明白。不會在'this.owner()'裏面的return語句,例如'return obj',也可以從'Model.prototye.toJSON'函數返回嗎?如何讓'Model.prototype.toJSON'返回'this.owner'調用的值? – faboolous