最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何从拉出的mongodb文档中添加字段

运维笔记admin7浏览0评论

如何从拉出的mongodb文档中添加字段

如何从拉出的mongodb文档中添加字段

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

当我呼叫路由时,我得到一个空数据,而当我打印回调的值时我得到一个空数组

 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是同步函数,所以不会在data变量中得到port。] >

所以最好的解决方法是,将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');
  }
});
发布评论

评论列表(0)

  1. 暂无评论