Как перебрать запрос и нажать на узел js?

У меня есть «таблица» продаж и другие пользователи, в «таблице» продажи у меня есть 3 поля: id, me_id, sale_user_id, эта таблица «продажи» относится к пользователям, которым я продал, а пользователи «таблицы» имеют основные данные (_id, имя, фамилия) ... В peticion, который я отправляю id, первое, что я делаю, это получаю id's пользователей, которые связаны со мной id (me_id) в таблице продаж и затем с помощью id's (sale_user_id), который возвращает меня, я просматриваю их в for, чтобы привести реальные данные пользователей с помощью другого запроса в таблице пользователей ....

ПРОБЛЕМА Во время выполнения console.log () в итерации он показывает мне данные, которые соответствуют идентификатору пользователя, проблема в том, что он не подталкивает меня к переменной и возвращает мне пустые данные, я пытался с async / await, и это не работает, где я буду неправ?

Я ценю интерес.

КОД

router.post('/getPurchases', async (req, res) => { 

  var usuarios = [];  

  await Sale.find({"me_id": req.body.id}, (err, docs) => { 

    for(let i in docs){    
      let res = User.findOne({"_id" : docs[i].sale_user_id}, async (err, data) => {
        console.log(data) // Me muestra 3 usuarios que estan asociados a ese id de venta mas no me hace push
        usuarios.push(data);
      });
    }  
  }  

  res.send(usuarios);
});
0
задан 29.11.2019, 04:30
1 ответ
  1. не будет подавать тебя использовать async/await, если ты используешь mongoose с callbacks.
  2. нет один parГ©ntesis, что закрыл Sale.find.
  3. EstГЎs делая shadowing переменной res и у этого могут быть неожиданные эффекты dГ, - в который refactorices.
  4. ты не делаешь ничто с возможной ошибкой, которая приходит в callback
  5. , цикл for/in он не asГ-ncrono. Ты должен использовать for/of, что приходит очень хорошо, потому что docs - array, не объект.

, Если делаешь например

for(let doc of docs){
   // doc es el documento mismo, no necesitas hacer docs[doc]
}

Ты cГіdigo, должен был быть чем-то как:

router.post('/getPurchases', async (req, res) => { 

    var usuarios = []; 
    try {
      let docs = await Sale.find({"me_id": req.body.id}); // sin callback

      for(let doc of docs){    // for of en vez de for in
        let data = await User.findOne({"_id" : doc.sale_user_id});
        usuarios.push(data);
      }
      res.send(data);
    }  catch (err) {
       res.send(err);
    }
});

Ты preguntarГЎs из-за quГ© функционирует сейчас console.log. Он, потому что Г©ste он происходит, когда завершаются findOne. Но когда ты делаешь await во что-то, что не обещание

await Sale.find({"me_id": req.body.id}, (err, docs) => {  })

, разгрузку, останься длины. Он, как ему говорит

 await function() { }();

, Которых

 await undefined

, решен сразу, хотя он внутри позвонил укрытые. Твой маршрут возвращает array vacГ - или и despuГ©s раз то, что прибывает в консоль, хотя это будет вещь микросекунд задержки.

0
ответ дан 01.12.2019, 10:39