Новое для Метеор, и я его до сих пор люблю. Я использую vzaar.com как платформу видео хостинга, и у них есть пакет node.js/API, который я добавил к моему проекту Meteor с метеорными атаками: npm. Все в API отлично работает, но когда я загружаю видео, мне нужно получить идентификатор видео из API при успешной загрузке.Метеор: Сделать Meteor.method вернуть обратный вызов
Проблема:
Мне нужно, чтобы сохранить идентификатор видео вернулся из vzaar API после загрузки, но так как это происходит в будущем, мой код не ждать результата и просто дает мне «не определено». Возможно ли, чтобы Meteor.method подождал ответа?
Вот мой метод до сих пор:
Meteor.methods({
vzaar: function (videopath) {
api.uploadAndProcessVideo(videopath, function (statusCode, data) {
console.log("Video ID: " + data.id);
return data.id;
}, {
title: "my video",
profile: 3
});
console.log(videoid);
}
});
И это, как Meteor.call выглядит как прямо сейчас:
Meteor.call("vzaar", "/Uploads/" + fileInfo.name, function (err, message) {
console.log(message);
});
Когда я называю этот метод, я сразу же получить undefined
в консоли браузера и метеоритной консоли, и через несколько секунд я получаю идентификатор видео в консоли метеорита.
Вы можете написать новую функцию там, которая будет повторно запускаться, если 'videoid' не определено и передать его как обратный вызов (только помогает с обратным вызовом, если вы разбираете данные несколькими способами). Вы также можете вызвать ту же функцию, что и внутри. Вы также можете попробовать опрос, где вы установите интервал для проверки каждые n миллисекунд, затем очистите интервал, когда установлен параметр «videoid». – below9k
Я нашел что-то интересное, Meteor.wrapAsync. Статья об этом здесь, но я не знаю, как ее реализовать в моем коде. https://meteorhacks.com/fibers-eventloop-and-meteor.html – user1554299