我有一个简单的功能,其中包括一些用于服务器端和客户端的逻辑。首先,我想知道它是否应该异步编写,但是由于它包含一个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来不同地处理它吗? 您能给我一个提示吗,因为我对这些纤维,承诺主题以及何时最适合使用它们感到困惑。