【问题标题】:update a variable inside loop更新循环内的变量
【发布时间】:2018-05-22 17:19:07
【问题描述】:

我正在尝试在一个循环中更新 var,然后将其返回到一个 Promise 中。但是 var 无法更新。到目前为止,我已经尝试过了,

var queryPromise = cronie.find({}).
    where('id').equals(req.user._id).
    exec();  //mongoose promise


    queryPromise.then(function(timer) { 
        for (var i = 0, len = timer.length; i < len; i++) {
            x = moment.unix(timer[i].nextTick).format('dddd, MMMM Do, YYYY h:mm:ss A');  //convert to human;
            console.log(x);
            timer[i].nextTick = x;
            console.log(timer[i].nextTick);
          }

          return timer;
    }).then(function(timer) { 
        res.render('dash.ejs', {
            user: req.user,
            timer: timer
        });

    });
});

这是输出:

0|server   | Monday, May 21st, 2018 11:00:00 PM
0|server   | 1526943600
0|server   | Monday, May 21st, 2018 7:28:22 PM
0|server   | 1526930902
0|server   | Monday, May 21st, 2018 7:28:22 PM
0|server   | 1526930902
0|server   | Monday, May 21st, 2018 7:28:22 PM
0|server   | 1526930902
0|server   | Monday, May 21st, 2018 7:28:22 PM
0|server   | 1526930902

timer[i].nextTick 保持不变。如何在将其发送到渲染之前对其进行更新,以便用户可以看到人工时间而不是戳记?

更新定时器数组的切片

0|server   |   { _id: 5b031dd6c0d99f79946f263f,
0|server   |     id: '5b031dd5c0d99f79946f263a',
0|server   |     lastTick: 1526930902,
0|server   |     nextTick: 1526930902,
0|server   |     lastUpdate: 1526930902,
0|server   |     __v: 0,
0|server   |     timerStatus: false,
0|server   |     emailStatus: false } 

更新 2

添加

timer[i].date =  moment.unix(timer[i].nextTick).format('dddd, MMMM Do, YYYY h:mm:ss A');

然后将 ejs 更改为 timer.date works。但是分配nextTick 仍然没有。

【问题讨论】:

  • 如果可以,请保持 .nextTick 属性不变并设置另一个属性,例如将 .nextTick_ 设置为格式化版本。

标签: javascript node.js foreach promise


【解决方案1】:

您可以使用.lean() 使返回的文档成为纯javascript 对象。这样你以后就可以随意操作了。

var queryPromise = cronie.find({}).
    where('id').equals(req.user._id).
    lean(). // make returned document be a plain js object
    exec();  //mongoose promise

启用lean 选项的查询返回的文档是纯javascript 对象,而不是MongooseDocuments。 他们没有应用 save 方法、getter/setter 或其他 Mongoose 魔法

【讨论】:

  • 这是正确的。我意识到,当我可以将其更新为数字并将 timer[i].nextTick = 5555 设置为 timer[i].nextTick = "aaa" 而不是 timer[i].nextTick 在架构中设置为 Number 时。我找不到解决方法。泰
猜你喜欢
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2018-12-25
  • 2011-02-19
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多