Meteor的新手,我到目前为止都喜欢它。我使用vzaar.com作为视频托管平台,他们有一个node.js包/ API,我将其添加到meteorhacks的meteor项目中:npm。 API中的所有内容都很有效,但是当我上传视频时,我需要在成功上传后从API中获取视频ID。
我需要在上传后保存从vzaar API返回的视频ID,但由于它将来发生,我的代码不会等待结果,只是给了我" undefined"。 是否可以让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
,几秒钟后,我在流星控制台中获取视频ID。
答案 0 :(得分:2)
undefined
,因为它在api回答之前运行了。
我首先尝试了Meteor.wrapAsync,我认为它会起作用,因为它实际上是Future光纤。但我最终使用了Future的原始NPM模块。请参阅此工作代码:
var Future = Npm.require('fibers/future');
Meteor.methods({
vzaar: function (videopath) {
var fut = new Future();
api.uploadAndProcessVideo(videopath, function (statusCode, data) {
// Return video id
fut.return (data.id);
}, {
// Video options
title: "hello world",
profile: 3
});
// The delayed return
return fut.wait();
}
});
请记住首先使用meteorhacks:npm正确安装npm模块。
了解了如何在这种情况下使用Future光纤我希望这对其他人有用,因为它很容易实现。