为什么此比较表达式在运行时评估不正确?

时间:2019-05-23 19:52:02

标签: javascript node.js

我正在通过遍历约有150000张带有元数据的图像的预编译本地数据库来将数据上传到Web服务。为了防止节点抛出Error: EMFILE, too many open files,我将上传文件批量处理为一次约5000张图像的小任务。

为此,我编写了一个接受上限和下限的脚本:

node upload.js bot_bound top_bound;

代码中有一个比较器,如下所示:

for(i in parsed_data){
    if(i >= bot_bound && i < top_bound){
        //...process the data
    }
}

真正给我带来麻烦的是(i >= bot_bound && i < top_bound)。表现...很奇怪。对于前几批,其边界低于40000,它跳过了某些值。当我尝试越来越多的批次时,它会跳过更多的值,直到跳过所有的值。到我的边界范围为[95000, 100000)时,所有值都返回false。

因此,要进行故障排除,我一直在其中抛出以下日志行:

(${i} > ${bot_range}) && (${i} < ${top_range}) :: ${(i >= bot_range && i< top_range)}

它在运行时输出:

...
(94999 >= 95000) && (94999 < 100000) :: false
(95000 >= 95000) && (95000 < 100000) :: false
(95001 >= 95000) && (95001 < 100000) :: false
(95002 >= 95000) && (95002 < 100000) :: false
(95003 >= 95000) && (95003 < 100000) :: false
...

但是,当我输入一个副本时,它会按预期运行:

> var bot_range = 95000 
undefined
> var top_range = 100000
undefined
> var i = 95001
undefined
> `(${i} > ${bot_range}) && (${i} < ${top_range}) :: ${(i >= bot_range && i< top_range)}`
'(95001 > 95000) && (95001 < 100000) :: true'

那么,这是怎么回事?我很困惑。

0 个答案:

没有答案