Я использую этот код в контексте 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
?
Где код для создания «No content»? – thefourtheye
Да, точно, результат вызова функции 'this.owner' - это функция' this.owner' возвращает = не то, что вызвала функция async внутри this.owner. –
@JaromandaX Я не понимаю. Не будет оператор return внутри 'this.owner()', например. 'return obj', также является возвратом функции' Model.prototye.toJSON'? Как заставить 'Model.prototype.toJSON' вернуть значение вызова' this.owner'? – faboolous