流星服务器端方法调用异步普通函数

时间:2019-04-09 09:39:04

标签: javascript asynchronous meteor fibers

我有一个简单的功能,其中包括一些用于服务器端和客户端的逻辑。首先,我想知道它是否应该异步编写,但是由于它包含一个Meteor调用方法(始终是异步的),我决定也应该异步编写,因此search_for_products函数如下所示:

功能search_for_products(选项,weight_1,weight_2,weight_3,weight_4,回调){

function function1(param1){
..
}
function function2(param2){
..
}
function function3(options){
..
}

let sortedProducts=[]

 Meteor.call('solve', options, function(error, result){
  if(error){
        console.log("Error");
    }else{                              
        console.log("Success");

        products=function1(result)
        function2(param2)
        function3(options)
        //some calculations that result in an Object sortedProducts
        sortedProducts
        //Session.set("sortedProducts",sortedProducts); //this is for client side


 }
 })
 callback (sortedProducts)

}
exports {search_for_products}

从服务器端方法调用它时,我的代码如下:

if (Meteor.isServer){
    Meteor.methods({ 
    recommendProducts:function(user){
        //some db find queries to set an object that will invoke the plain function 
        options={....}
        const convertAsynctoSync = Meteor.wrapAsync(search_for_products);
        // pass arguments to the function
        const resultofAsynctoSync=convertAsynctoSync(options,weight_1,weight_2,weight_3,weight_4)
        console.log("test syncFun", convertAsynctoSync)
        console.log("resultofAsynctoSync",resultofAsynctoSync)

        return resultofAsynctoSync;
        }
    })
    }

我从日志中看到该函数已被调用,但是从没有在resultofAsynctoSync中设置返回值,所以我错过了这两行

console.log("test syncFun", convertAsynctoSync)
console.log("resultofAsynctoSync",resultofAsynctoSync)
从控制台

以确保它实际上返回正确的结果。 我应该使用Promises而不是wrapAsync来不同地处理它吗? 您能给我一个提示吗,因为我对这些纤维,承诺主题以及何时最适合使用它们感到困惑。

0 个答案:

没有答案