2013-07-30 21 views
0

以異步模式運行訂閱並使用new Future()可以正常工作,但如果在Meteor.method中完成同樣的事情,則應用程序會崩潰並顯示消息,說明不能等光纖。但是,我不得不從Meteor.method在Meteor.methods中使用Future.wait()

返回的東西這是方法:

/**global variables*/ 
var Fiber = Npm.require("fibers"); 
var Future = Npm.require("fibers/future"); 

Meteor.methods({ 
'single-data': function (form, state, tenant, selectedRow, search, sort) { 
    var user = Meteor.users.findOne({_id: this.userId}); 
    /**check if the user can see the data in the state*/ 
    if (!(isAdmin(user, form) || hasPermission(user, form, state, "read"))) { 
    return null; 
    } 

    /** set the sort order for the query*/ 
    var order = []; 
    if (sort) { 
    order.push(["fieldData." + sort.column + ".0.value", sort.order == 1 ? "asc" : "desc"]); 
    } 
    order.push(["submitTime", "desc"]); 

    var query = dataQuery(form, state, _.uniq(_.pluck(user.groups, "tenant")), search); 

    var fut = new Future(); 
    var fut = new Future(); setTimeout(function() { 
     fut.ret(FormDatas.find(query, {sort: order, skip: selectedRow, limit: 1}).fetch()[0]); 
    }, 0 * 1000); 

    // Wait for async to finish before returning the result 
    return fut.wait(); 
} 
}); 

回答

0

我認爲,從未來返回值不應該包含異步代碼,它應該調用ret()之前發生。無論如何,在你的情況下,未來是不需要的,只需致電

return FormDatas.findOne(query, options); 
相關問題