使用 Node.js 进行同步写入时出错
Error during synchronous write using Node.js
我编写了代码来解析从 Firebase 返回的字典,其中包含使用 base64 编码的图像。我希望它将这些图像简单地写入文件,它确实如此,但在我完成写入后收到以下错误:
smalloc.cc:280: void node::smalloc::SliceOnto(const v8::FunctionCallbackInfo<v8::Value>&): Assertion `end <= source_len' failed.
这是我的代码:
// Iterate through each key in each page if each request
for (var key in request) {
var obj = request[key];
if (typeof (obj) == "object") {
for (var prop in obj) {
item++;
if(obj.hasOwnProperty(prop)) {
switch (prop) {
case "img":
var media = new ReceivedMedia(obj[prop]);
var filename = transaction.tid + "-" + item + "." + media.extension;
filename = filename.slice(10);
require('fs').writeFileSync(filename, media.b64, 'base64', function(err) {
if (err) throw err;
});
break;
}
}
}
}
}
我的图像输出正常,但错误有点奇怪,我希望不要发生。有人知道为什么会这样吗?那将非常有帮助:)
注:ReceivedMedia
是一个class我定义为:
function ReceivedMedia(media) {
this.b64 = media.b64;
this.extension = media.extension;
this.posx = media.posx;
this.posy = media.posy;
}
附带问题:如果我使用 writeFile
而不是 writeFileSync
,我的一张图片已损坏,另一张不包含任何数据。如果在那之后我再次 运行 我的节点脚本,文件会正确保存。我还想解释为什么会发生这种情况,根据我的理解,其中一个是同步的(writeFileSync
我猜),另一个是异步的(writeFile
我假设)。
Google 搜索您的错误消息描述,发现 this discussion of the issue in io.js and this discussion in node.js 听起来这是一个已修复的错误(不确定修复是否已在完整版本中发布) .
node.js 修复是 here。
如果您现在迫切希望在自己的构建中修复它,则必须将修复应用到您自己的代码树并重建它。否则,您将不得不调查或询问此修复程序何时会进入正式版本(我个人不确定该过程如何适用于 node.js)。
我编写了代码来解析从 Firebase 返回的字典,其中包含使用 base64 编码的图像。我希望它将这些图像简单地写入文件,它确实如此,但在我完成写入后收到以下错误:
smalloc.cc:280: void node::smalloc::SliceOnto(const v8::FunctionCallbackInfo<v8::Value>&): Assertion `end <= source_len' failed.
这是我的代码:
// Iterate through each key in each page if each request
for (var key in request) {
var obj = request[key];
if (typeof (obj) == "object") {
for (var prop in obj) {
item++;
if(obj.hasOwnProperty(prop)) {
switch (prop) {
case "img":
var media = new ReceivedMedia(obj[prop]);
var filename = transaction.tid + "-" + item + "." + media.extension;
filename = filename.slice(10);
require('fs').writeFileSync(filename, media.b64, 'base64', function(err) {
if (err) throw err;
});
break;
}
}
}
}
}
我的图像输出正常,但错误有点奇怪,我希望不要发生。有人知道为什么会这样吗?那将非常有帮助:)
注:ReceivedMedia
是一个class我定义为:
function ReceivedMedia(media) {
this.b64 = media.b64;
this.extension = media.extension;
this.posx = media.posx;
this.posy = media.posy;
}
附带问题:如果我使用 writeFile
而不是 writeFileSync
,我的一张图片已损坏,另一张不包含任何数据。如果在那之后我再次 运行 我的节点脚本,文件会正确保存。我还想解释为什么会发生这种情况,根据我的理解,其中一个是同步的(writeFileSync
我猜),另一个是异步的(writeFile
我假设)。
Google 搜索您的错误消息描述,发现 this discussion of the issue in io.js and this discussion in node.js 听起来这是一个已修复的错误(不确定修复是否已在完整版本中发布) .
node.js 修复是 here。
如果您现在迫切希望在自己的构建中修复它,则必须将修复应用到您自己的代码树并重建它。否则,您将不得不调查或询问此修复程序何时会进入正式版本(我个人不确定该过程如何适用于 node.js)。