1

我需要运行两个嵌套的异步函数并将第二个函数的回调返回给客户端。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();

      }
    });
});
4

1 回答 1

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();
  }
});
于 2016-01-17T12:53:35.757 回答