Я делаю приложение MeteorJS, в котором я извлекаю несколько файлов из удаленного API.
Одна запись API может иметь несколько файлов — я хочу загрузить их, сохранить в моей коллекции Media
и получить их идентификатор для сохранения в другой коллекции (например, NotMedia
):
// Client side: apiArr is an array with api json objects
for(var a in apiArr){
var pic1_id = Meteor.call('saveMedia', apiArr[a].image1_url);
var pic2_id = Meteor.call('saveMedia', apiArr[a].image2_url);
var collection = {
name: apiArr[a].name,
description: apiArr[a].desc,
image1_id: pic1_id,
image2_id: pic2_id
};
NotMedia.insert(collection);
}
мой метод метеора:
//Server side:
Meteor.methods({
saveMedia: function(media){
var file = new FS.File();
file.attachData(media, function(err){
if(err){
throw err;
}
file.origin_name = media;
var id = Media.insert(file);
return id;
});
},
});
Но когда я извлекаю сохраненную запись NotMedia
, image_id
становятся undefined
. Я понимаю, что вставка NotMedia
завершается быстрее, чем сохранение файлов изображений, но как я могу синхронизировать это/ждать завершения Meteor.calls
?
Meteor.wrapAsync
разными способами, но безуспешно - пример кода был бы отличным 26.11.2015