Нужна помощь для мангуста .find () - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужен результат Mongoose's find().exec в следующем формате. Можно ли отформатировать результат таким образом?

var myFunction = function(foo, bar) {
  model1.find({ elem: foo, elem2: bar }).exec(function(err, data) {
    if (err) {
      /* ... */
    }
    if (data) {
      if (data.passed == true) {
        return { passed: true, point: data.point };
      } else {
        return { passed: false, point: data.point };
      }
    } else {
      return { passed: false, point: "not tried" };
    }
  });
};

object = {
...
someitem: array.map(function(arr) {
  return {
    _id: program._id,
    title: program.title,
    slug: program.slug,
    status: myFunction(arr._id, arr._id2) /* Like This */
  };
});
...
} 

и извините за мой плохой английский: D

1 Ответ

0 голосов
/ 17 апреля 2019

Вы должны вернуть обещание из функции, чтобы получить значения, поступающие из запроса mongoose. Поэтому измените свою функцию на:

var myFunction = function(foo,bar) {
 return new Promise(function(resolve, reject){
    model1.find({elem : foo, elem2 : bar}).exec(function (err, data){
     if(err){
       /* Blablabla*/
       reject(err);
     }
     if(data){
       if(data.passed == true){
         resolve({passed:true, point:data.point});
       } else {
         resolve({passed:false, point:data.point});
       }
     } else {
        resolve({passed:false, point:'not tried});
     }
    });
  });
}

Чем, если вы хотите вызвать функцию и получить значение, которое вы должны сделать, например:

let promises, obj_elem = [];

for(let i =0;i < array.length;i++){
  promises.push(myFunction(array[i]._id, array[i]. _id2));
}

/* You can't do it sync manner so you have to use some kind of async process */
Promise.all(promises).then((result)=>{
  for(let i =0;i < result.length;i++){
     obj_elem.push({
        _id: program._id,
        title: program.title,
        slug: program.slug,
        status: result[i].passed 
     });
  }
  console.log(obj_elem); //here you will have values you want
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...