Я работаю с Loopback, и я хочу создать интерфейс загрузки, который регистрирует количество загрузок. Я использую собственную модель вместе с компонентом хранения.Loopback - Изменение атрибута объекта после асинхронной загрузки
Я использую функцию загрузки компонента хранения, и я хочу обновить атрибут объекта uploadedPictures после успешной загрузки (см. Код ниже). У меня есть проблема, что я не знаю, как использовать «эту» ссылку после асинхронного метода безопасным способом. Например. если есть много вызовов моей функции, атрибут подсчитывается только один раз.
module.exports = function(Upload) {
Upload.prototype.upload = function(ctx, options, cb) {
if (!options)
options = {};
ctx.req.params.container = 'common';
// starting the upload and wait for the result
var promise = new Promise(function(resolve, reject) {
Upload.app.models.container.upload(ctx.req, ctx.result, options, function(err, fileObj) {
if (err) {
console.error('error occured during upload');
cb(err);
}
else {
var fileInfo = fileObj.files.file[0];
resolve(fileInfo);
}
});
});
var uploadObject = this; // not safe, but how should I do it?
// count 'uploadedPictures' up, but only if upload was successful
promise.then(function(fileInfo) {
uploadObject.uploadedPictures++;
uploadObject.save();
})
.catch(function(e) {
console.error('error: '+e);
});
cb(null, this);
};
Upload.remoteMethod('upload', {
description : 'Uploads a file',
accepts : [ {
arg : 'ctx',
type : 'object',
http : {
source : 'context'
}
}, {
arg : 'options',
type : 'object',
http : {
source : 'query'
}
} ],
returns : {
arg : 'fileObject',
type : 'object',
root : true
},
isStatic : false,
http : {
verb : 'post'
}
});
};