У меня есть простая функция, включающая некоторую логику как для серверной, так и для клиентской части. Во-первых, мне было интересно, должна ли она быть написана асинхронно или нет, но из-за того, что она содержит метод вызова Meteor (который всегда асинхронный), я решила, что он также должен быть асинхронным, поэтому функция search_for_products выглядит следующим образом:
функция search_for_products (опции, weight_1, weight_2, weight_3, weight_4, callback) {
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;
}
})
}
Я вижу из журналов, что функция вызывается, но возвращаемое значение никогда не устанавливается в результате AsynctoSync, поэтому я пропускаю эти 2 строки
console.log("test syncFun", convertAsynctoSync)
console.log("resultofAsynctoSync",resultofAsynctoSync)
из консоли, чтобы убедиться, что она действительно возвращает правильные результаты.
Должен ли я обращаться с этим по-другому с обещаниями вместо wrapAsync?
Можете ли вы дать подсказку, потому что я немного запутался с темой «Волокна, обещания» и когда лучше всего их использовать.