【发布时间】:2013-08-28 13:42:51
【问题描述】:
我使用某个 Node.js 类进行文本分类。最简单的形式是这样的:
function TextCategorizer(preprocessors) {
...
}
“预处理器”是一个函数数组,形式如下:
function(text) {
return "<modified text>"
}
它们可用于例如删除标点符号、转换为小写等。
我可以像这样使用 TextCategorizer:
var cat = newTextCategorizer(preprocessors);
cat.train(text1,class1);
cat.train(text2,class2);
...
console.log(cat.classify(text3,class3);
按每个训练文本和分类文本的顺序调用预处理器。
现在,我需要添加一个新的预处理器功能 - 一个拼写纠正器。我发现最好的拼写更正了异步工作(通过网络服务),所以,函数看起来像这样:
correctSpelling(text, callback) {
...
callback(corrected_version_of_text);
}
即它不返回值,而是使用该值调用回调函数。
我的问题是:作为我发送给 TextCategorizer 的预处理器数组中的预处理器之一,我如何使用正确的拼写函数?
【问题讨论】:
-
为什么不异步使用呢?异步是节点的口头禅。
-
作为一个独立的函数,我当然可以异步使用。但正如我在问题中解释的那样,我想将它用作另一个模块的输入,该模块需要一个同步函数。
-
通过异步调用将你的预处理器放在一个闭包中。然后在这个闭包中定义你的回调,这样回调函数就可以访问预处理器数组。
-
@ChrisCM “通过异步调用将你的预处理器放在一个闭包中”——这是什么意思?我该怎么做?
-
@ErelSegalHalevi 我相信 ChrisCM 的意思是我在下面的答案中发布的内容。
标签: node.js asynchronous