Methods Meteor:使Meteor.method返回回调

Methods Meteor:使Meteor.method返回回调,methods,meteor,callback,Methods,Meteor,Callback,流星是新来的,到目前为止我很喜欢它。我使用vzaar.com作为视频托管平台,他们有一个node.js包/API,我用meteorhacks:npm添加到我的Meteor项目中。API中的一切都很好,但是当我上传视频时,我需要在成功上传时从API中获取视频ID 问题: 我需要保存上传后从vzaar API返回的视频id,但由于这是在将来发生的,我的代码不会等待结果,只会给我“未定义”是否可以让Meteor.method等待响应? 以下是我目前的方法: Meteor.methods({

流星是新来的,到目前为止我很喜欢它。我使用vzaar.com作为视频托管平台,他们有一个node.js包/API,我用meteorhacks:npm添加到我的Meteor项目中。API中的一切都很好,但是当我上传视频时,我需要在成功上传时从API中获取视频ID

问题: 我需要保存上传后从vzaar API返回的视频id,但由于这是在将来发生的,我的代码不会等待结果,只会给我“未定义”是否可以让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);
});
当我调用此方法时,我立即在浏览器控制台和meteor控制台中获得
未定义的
,几秒钟后,我在meteor控制台中获得视频ID。

解决方案 经过几天的反复试验,我终于解决了这个问题。我学习了光纤(和),并进一步了解了Node.js的核心事件循环。问题是这个调用在将来会应答,所以我的代码总是返回
undefined
,因为它在api应答之前运行

我首先尝试了Meteor.wrapAsync,我认为它会起作用,因为它实际上是未来的光纤。但我最终使用了未来的原始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();

    }

});
请记住首先正确安装npm模块

我通过以下途径了解了如何在这种情况下使用未来光纤


我希望这对其他人有用,因为它确实很容易实现。

您可以在那里编写一个新函数,如果
videoid
未定义,它将重新运行,并将其作为回调传递(仅当您以多种方式解析数据时才有助于回调)。你也可以调用你在里面的函数。您也可以尝试轮询,设置间隔以每n毫秒检查一次,然后在设置
videoid
时清除间隔。我发现了一些有趣的东西,Meteor.wrapAsync。这里有一篇关于它的文章,但我不知道如何在我的代码中实现它。