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