javascript - 两个错误之一:内存不足或 Javascript 运行时意外退出
问题描述
我没有找到任何其他真正反驳这个问题的话题。
正如标题所说,我在尝试运行以下代码时遇到了这两个错误之一:(出于隐私目的,我编辑了项目 ID、查询和文件 ID。)
function runQuery() {
var projectId = 'projectId';
var request = {
query: 'SELECT * FROM [databaseName];'
};
var queryResults = BigQuery.Jobs.query(request, projectId);
var jobId = queryResults.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
if (rows) {
var fileID = 'fileID';
var spreadsheet= SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheetByName("tabId");
sheet.clear();
// Append the headers.
var headers = queryResults.schema.fields.map(function(field) {
return field.name;
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(5);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
sheet.getRange(2, 1, rows.length, 5).setValues(data);
Logger.log('Results spreadsheet created: %s',
spreadsheet.getUrl());
} else {
Logger.log('No rows returned.');
}
}
错误 1:JavaScript 运行时意外退出。解雇
错误 2:内存不足错误。解雇
额外信息
数据库信息:
- 144625 行
- 5列
- 文件中的 1 张纸
在写作之前,我清除工作表中的所有内容和格式:
if (rows) {
var fileID = 'fileID';
var spreadsheet= SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheetByName("tabId");
sheet.clear();
当我在清除工作表后记录行数和列数时:
- 1000 行
- 26列
我想这是标准尺寸。
结果
代码运行后我得到错误,只有标题被写入电子表格。没有其他单元格被填充:
- 1 行
- 5列
我该如何解决这个问题?如果您需要更多信息,请随时询问。
解决方案
getDescendants()
在大型 XML 文件 (> 6MB) 上使用时,我遇到了非常相似的问题。作为getDescendants()
来自 XML 服务的方法,我不知道问题是由 on 在将结果传递给运行时之前还是由它接收到结果时引起的。
就我而言,我通过使用getChildren(name, namespace)
而不是getDescendants()
返回约 6000 个元素解决了这个问题。
在这种情况下,正如 TheMaster 所建议的,尝试限制 , 的大小data
是通过在数据达到一定长度(即 5000)时将数据传递到电子表格,然后清除data
。
推荐阅读
- bootstrap-4 - Bootstrap 的 Md 大小从分辨率 1200 像素开始
- javascript - 由于被 CORS 策略(javascript、html 和 css)阻止,程序在 Firefox 中运行但在 chrome 中无法运行
- asp.net - 如何检查 RawURL 是否为空?
- ios - 金属着色语言中的关键字“设备”是什么意思
- amazon-web-services - 来自 IoT 设备影子的 AWS Lambda 不起作用
- c# - 压缩\解压缩二进制文件
- powerbi - 如何清理power bi中的位置数据
- java - 未找到类型返回值的转换器:类 org.json.JSONObject
- machine-learning - Apple Vision Framework 识别人脸
- vb.net - 在VB.NET中使用代码时直接打印