首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有日期对象的Node.js Cron作业处理

带有日期对象的Node.js Cron作业处理
EN

Stack Overflow用户
提问于 2012-06-28 01:52:36
回答 1查看 2.3K关注 0票数 0

我试图安排几个cron作业来为我的web应用程序中的不同实体生成序列号。然而,我遇到了这个问题,当我循环每个表时,它说它与date.js有关。我没有用约会对象做任何事?至少在这个阶段没有。有几个猜测是cron对象正在其代码中执行日期操作,并引用date.js。我正在使用date.js来访问像ISO这样的东西。

代码语言:javascript
运行
复制
for (t in config.generatorTables) {
    console.log("t = " + config.generatorTables[t] + "\n\n");

    var ts3 = azure.createTableService();
    var jobSerialNumbers = new cronJob({
        //cronTime: '*/' + rndNumber + ' * * * * *',
        cronTime: '*/1 * * * * *',
        onTick: function () {
            //console.log(new Date() + " calling topUpSerialNumbers \n\n");
            manageSerialNumbers.topUpSerialNumbers(config.generatorTables[t], function () { });
        },
        start: false,
        timeZone: "America/Los_Angeles"
    });

    ts3.createTableIfNotExists(config.generatorTables[t], function (error) {
        if (error === null) {
            var query = azure.TableQuery
                .select()
                .from(config.generatorTables[t])
                .where('PartitionKey eq ?', '0')

            ts3.queryEntities(query, function (error, serialNumberEntities) {
                if (error === null && serialNumberEntities.length == 0) {
                    manageSerialNumbers.generateNewNumbers(config.maxNumber, config.serialNumberSize, config.generatorTables[t], function () {
                        jobSerialNumbers.start();
                    });
                }
                else jobSerialNumbers.start();
            });
        }
    });
}

这是当我检查server.js.log\0.txt文件时得到的错误消息:

C:\node\w\WebRole1\public\javascripts\date.js:56 onsole.log('isDST');返回this.toString()this.toString().match(/(E/(E/(E~+)C~++M~+))(S_\D)T/)2 == "D“^ TypeError:不能在Date.isDST Date.getTimezone上读取TypeError属性'2‘(C:\node\w\WebRole1 1\public\javascripts\date)(C:\node\w\WebRole1\node_modules\cron\lib\cron.js:88:30) at Object.sendAt (C:\node\w\WebRole1\node_modules\cron\lib\cron.js:51:17) at Object.getTimeout (C:\node\w\WebRole1\node_modules\cron\lib\cron.js:58:30) at Object.start (C:\node\w\WebRole1 1\)( (C:\node\w\WebRole1\utils\manageSerialNumbers.js:106:5) at C:\node\w\WebRole1\server.js:168:45 at C:\node\w\WebRole1\node_modules\azure\lib\services\table\tableservice.js:485:7 at C:\node\w\WebRole1\server.js:168:45)

我在我的database.js文件中使用了这一行:

要求(‘./public/javascripts/date’);

我只需要做一次,因为date.js是全局的,这是正确的吗?也就是说,它有一堆内建日期对象的原型(扩展)。

在manageSerialNumbers.js中,我只是做一个回调,它们不是正在执行的代码,因为我已经注释掉了,但是仍然收到了这个错误。

如有任何帮助或建议,将不胜感激。

好的,我已经注释掉了date.js模块,现在我得到了这个错误:

您指定了一个Timezone,但没有包含time模块。禁用时区功能。请安装time模块以在应用程序中使用时区。

当我检查cron.js模块时,它的顶部有以下语句:

代码语言:javascript
运行
复制
var CronDate = Date;
try {
  CronDate = require("time").Date;
} catch(e) {
  //no time module...leave CronDate alone. :)
}

因此,这将得出结论,它确实与date.js模块有关吗?

任何人都能看到什么不对劲。

干杯

EN

回答 1

Stack Overflow用户

发布于 2012-07-11 21:22:55

我使用了date.js一段时间,然后意识到Node.js/V8中的Date对象已经有了ISO支持、输入和输出,而Date.js只添加了一个非常特殊的边缘情况。你到底需要date.js做什么?

如果你真的需要date.js..。

我只需要做一次,因为date.js是全局的,这是正确的吗?

只要代码在同一个进程中运行,这是正确的。我不熟悉Azure上的Node.js,也不熟悉提供您正在使用的cronJob方法的库,但也许它产生了一个新进程,它有自己的V8实例,然后丢失了日期对象更改?(因此,在代码中再次使用require。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11237107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档