【发布时间】:2017-10-11 20:25:50
【问题描述】:
我正在使用 NodeJS 和 MongoDB 数据库构建一个 webapp。目前以下内容让我感到沮丧 - 我缺乏对回调/(a)同步元素的理解并且仍在学习这一点,所以我认为它与这方面有关。
我有两个主要模块:
DB.js 导出 - 此函数在自行调用时起作用:
DB.GetSuggestions: function(searchTerm) {
return MongoClient.connect(url).then(function(db) {
var collection = db.collection("AccentPairs");
collection.updateMany(
{Unstressed: searchTerm},
{$inc: {QueryCount: 1}}
);
var result = collection.aggregate([
{ $match: { Unstressed: searchTerm } },
{ $group: { _id: {"WordID": "$WordID", "WordName": "$WordName", "Unstressed": "$Unstressed", "Stressed": "$Stressed", "TranslationEn": "$TranslationEn"}, Forms: { $push: "$Field" }}}
]).sort( { Chosen: -1} ).toArray();
db.close();
return result;
});
}
TextHandler.js:
var DB = require("../DB");
function ImportText(Text) {
var fullText = Text.trim();
var TextObject = {AuthorName: "", Title: "", Words: []};
var currentWord = "";
var BOS = true;
var EOS = false;
let reg = /([а-яА-ЯЁё́]+)([^а-яА-ЯЁё́]*)/g;
var result;
while (result = reg.exec(fullText)) {
BOS = EOS;
EOS = (result[2].indexOf(".") > -1);
currentWord = result[1];
WordObject = {WordText: result[1], WordID: "0", Options: [], Tail: result[2], BOS: BOS, EOS: EOS};
TextObject.Words.push(WordObject);
}
//This is what doesn't work - GetSuggestions within the loop doesn't work.
TextObject.Words.forEach(function(wd){
console.log(wd.WordText);
DB.GetSuggestions(wd.WordText).then(function(suggestions){
wd.Options = suggestions;
});
});
}
我正在尝试遍历 TextObject.Words 数组并使用 GetSuggestions 函数在数据库中搜索建议。在循环内调用 GetSuggestions 不起作用,在循环外它起作用。
29335 ms: Mark-sweep 1386.5 (1440.6) -> 1386.5 (1440.6) MB, 1156.9 / 0.7 ms [分配失败] [GC in old space req 使用]。 30456 ms:标记扫描 1386.5 (1440.6) -> 1387.5 (1424.6) MB,1120.6 / 0.7 ms [最后的 gc]。 31576 毫秒:标记扫描 1387.5 (1424.6) -> 1388.4 (1424.6) MB,1119.4 / 0.7 毫秒 [最后的 gc]。
==== JS 堆栈跟踪 ========================================= =
安全上下文:000001186EBCFB49 1: /* 匿名 /(aka / 匿名 */) [C:\Home\CS\TextAnalysis\Ezhik\node_modules\mongodb\lib\url_parser.js:~7] [p c=000003CC6CBB279E](这=000001186EB04381,url=0000004FD766F421) 2:参数适配器框架:2->1 3:连接(又名连接)[C:\Home\CS\TextAnalysis\Ezhik\node_modules\mongodb\lib\mongo_client.js:~390] [pc=000...
致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足
【问题讨论】:
-
您收到什么错误?
-
您期望会发生什么? 实际上会发生什么?
-
没有错误 - 它只是卡在循环中。编辑:更新帖子。
-
ImportText在哪里调用? -
我没有复制整个模块以节省空间。 ImportText 从 Texthandler.js 中的另一个函数调用 - 一个打开和读取特定文件夹中文本文件的函数。
标签: javascript node.js mongodb