我的nodejs代码中有一个for循环
const saveDocument = co.wrap(function *(documentData, user, locale) {
var now = moment();
var creationDateLongString = now.format("YYYYMMDDHHmmss");
var creationDateShortString = now.format("YYYYMMDD");
var outputChildFolder = documentData.code + '_' + creationDateLongString + '_' + documentCounter;
var outputFolder = config.files.incomingDocumentsDir + '/' + outputChildFolder;
++documentCounter;
yield fs.mkdir(outputFolder)
var xmlFileName = documentData.code + "-" + creationDateLongString + ".xml";
var pdfFileName = documentData.code + "-" + creationDateLongString + ".pdf";
const pages = [];
for(var index=0;index < documentData.pages.length; ++index) {
const page = documentData.pages[index];
var data = new Buffer(page, "base64");
var dataEncoding = imageType(data).mime === "image/png" ? "png" : "jpg";
var fileName = "page" + index + "." + dataEncoding;
var targetFilePath = outputFolder + "/" + fileName
yield fs.writeFile(targetFilePath,data);
pages.push(fileName);
}
...
}
我不明白的是,为什么在上面的代码中
page
只在第一次迭代中被赋值一次,而在其他迭代中保持相同的值。所以如果我有5页,我会用变量中第一页的数据结束5次。我运行的节点4没有任何特殊参数或后处理器。简单地
npm run ...
它映射到mynode src/main/myApp.js
中的apackage.json
我可能在这里遗漏了一些简单的东西,但在做客户端ES6代码时,我从来没有见过这样的情况。当然,最大的区别是客户端代码通过babel+webpack,服务器端代码直接通过node运行。
小补遗:如果你想知道为什么语法是“老派”,而不是像
pages.forEach(....
那样,那是因为这是我刚刚做了一些小修改的现有代码。 最佳答案
在严格模式下,这将如您所期望的那样工作。尝试添加…
"use strict";
您只会在实际尊重并强制使用关键字的环境(如node)中看到这种行为。babel现在只需将所有
let
和const
转换为var
即可提供ES5
兼容性。为了演示,请看一下这个babelexample。您可以在输出中看到const
已更改为var