嵌套异步函数 - 在Fibers中运行的未来返回

时间:2016-01-17 02:17:43

标签: asynchronous meteor node-fibers

我需要运行两个嵌套的异步函数,并从第二个函数返回到客户端的回调。 future.return在Fibers中不起作用。如何在不使用集合的情况下将结果返回给客户端?

Meteor.methods({
    'youtube':function(object) {

    var youTube = new YouTube();

    youTube.search(object.song, 1, function(error, result) {
      if (error) {
        console.log(error);
      }
      else {
        Fiber(function() {

          var future = new Future();

          ytdl.getInfo(result.url, function(err, result) {
            future.return({data: result});
          });

          return future.wait();

        }).run();

      }
    });
});

1 个答案:

答案 0 :(得分:2)

Future应该在第一个方法范围内返回。阅读Meteor.bindEnvironment

var Future = Npm.require('fibers/future');
var bound  = Meteor.bindEnvironment(function(callback){ return callback(); });
Meteor.methods({
  'youtube':function(object) {
    var fut = new Future();
    var youTube = new YouTube();

    youTube.search(object.song, 1, function (error, result) {
      bound(function () {
        if (error) {
          console.log(error);
        } else {
          ytdl.getInfo(result.url, function(err, result) {
            fut.return({data: result});
          });
        }
      });
    });
    return fut.wait();
  }
});