javascript - 如何从拉取的 mongodb 文档中添加字段

标签 javascript node.js mongodb promise async-await

我正在尝试使用 API 获取股票的当前值(value)并乘以用户股票。

当我调用路由时,我得到空数据,当我打印回调值时,我得到一个空数组

 function user_cur_portfolio(port, callback) {
  let portfolio = [];
  port.forEach( (stock) => {
    var ticker = stock.name.toLowerCase();
    alpha.data.quote(`${ticker}`).then(data => {
      var fixed = Number((data['Global Quote']['05. price'] * stock.shares).toFixed(2));
      let curr = {
        name : ticker,
        shares: stock.shares,
        value : fixed
      }
      portfolio.push(curr)
    });
  })
  callback(portfolio)
}
router.get('/portfolio', (req, res, next) => {
  if (req.session.userId !== undefined){

     User.findOne({ _id : req.session.userId }).exec(function (err, user) {
      if (err)
        next(err);

        user_cur_portfolio(user.portfolio, (port)=>{
          console.log(port);

          res.render('portfolio', { portfolio: port, balance: user.balance});
        });    
    })
  } else { 
    res.redirect('/users/login');
  }
});

最佳答案

当我调用路由时,我得到空数据 因为 alpha.data.quote 是一个异步函数而 forEach 是一个同步函数因此,您不会在 port 变量中获取 data

因此最好的解决方法是将 async await 与所有同步函数一起使用,使其表现得像 async

async function user_cur_portfolio(port) {
  let portfolio = [];
  await Promise.all(
    port.map(async stock => {
      var ticker = stock.name.toLowerCase();
      const data = await alpha.data.quote(`${ticker}`);
      var fixed = Number((data['Global Quote']['05. price'] * stock.shares).toFixed(2));
      let curr = {
        name: ticker,
        shares: stock.shares,
        value: fixed
      };
      portfolio.push(curr);
    })
  );
  return portfolio;
}

router.get('/portfolio', (req, res, next) => {
  if (req.session.userId !== undefined) {
    User.findOne({ _id: req.session.userId }).exec(async function(err, user) {
      if (err) next(err);
      const port = await user_cur_portfolio(user.portfolio);
      console.log(port);
      res.render('portfolio', { portfolio: port, balance: user.balance });
    });
  } else {
    res.redirect('/users/login');
  }
});

关于javascript - 如何从拉取的 mongodb 文档中添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58231143/

相关文章:

node.js - Typescript Express 项目中的客户端 Javascript

sql - Sequelize 包含 where 条件

node.js - 从主机连接到 mongo docker 容器

javascript - 在 node.js (Express) 中分配给 res 和 res.locals 的区别

javascript - 水平条形图(最好是动画)react.js

javascript - 避免使用 javascript 依赖项污染全局命名空间

javascript - 如何用JavaScript区分网页中的空白区域和非空白区域?

MongoDB - 多少数据是太多的数据?

mongodb - mongodb 中的子查询

javascript - 停止穿过 map 的 d3 路径