在下面的代码中,我试图从一个名为spellSuggestions的“ nodehun”方法中获取一个值。在文档中,我被告知使用此方法的语法如下:dict.spellSuggestions(w,handleMisspellings); 其中w是单词列表,handleMisspellings是一个函数(在下面发布)。我可以在控制台上看到handleMisspellings的输出,但是对于我来说,我无法返回或找到从此调用返回变量的方法:[dict.spellSuggestions(w,handleMisspellings);]。在将var设置为等于“ dict.spellSuggestions(w,handleMisspellings);”之后返回值是不确定的。请帮忙!
var debugFlag = process.argv.indexOf('debug') > -1;
var nodehun = require('./../build/' + (debugFlag ? 'Debug' : 'Release') + '/nodehun');
var fs = require('fs');
var dict = new nodehun(fs.readFileSync(__dirname+'/dictionaries/en_US.aff'),fs.readFileSync(__dirname+'/dictionaries/en_US.dic'));
//var words = ['original', 'roach', 'erasee', 'come', 'consol', 'argumnt', 'gage',
// 'libary', 'lisence', 'principal', 'realy', 'license', 'suprise', 'writting'];
var handleMisspellings = function(err, correct, suggestions, origWord, callback) {
if (err) throw err;
if (correct) {
console.log(origWord + ' is spelled correctly!');
}
else {
console.log(origWord + ' not recognized. Suggestions: ' + suggestions);
}
var value = {
err: err,
correct: correct,
suggestions: suggestions,
origWord: origWord
};
console.log('VALUE+++++: ' + value);
return value;
}
var foo = function(words) {
words.forEach(function(w) {
dict.spellSuggestions(w, handleMisspellings);
some = dict;
console.log(JSON.stringify(some, null, 2));
});
}
module.exports = {
foo: foo
}
答案 0 :(得分:0)
谢谢戴夫。我最终发现了回调函数的实际用法。对于每个包含要在方法外部访问的数据的方法,我声明了一个单独的函数来包装该方法。该函数接受两个输入参数。第一个是用于驱动方法调用的输入变量。第二个是字面上的“回调”。在该方法内部,我将执行任何我想将数据打包到JSON对象中的操作,然后再使用“ return callback(var)”返回任何所需的数据。在调用创建的包装函数时,我实际上将使用选择的输入变量来调用该函数,以在函数定义中驱动该方法,并传递“ function(return_variable)”作为第二个参数。这创建了一种新方法,在该方法中可以访问甚至再次调用所需的数据。我想要的最终代码对单词列表的每个元素执行一个for循环,创建关于这些单词的元数据,并将每个单词的唯一数据附加到单个数组中的每个单词上。最终的数组是一个单个对象,其中包含所有输入单词以及有关这些单词的所有数据。它需要4个单独的函数(其中一个是递归的)和一个函数调用。请参见上述[doCall]函数的代码段。请注意,代码的使用始于对“ analyze”的调用(在此处进行注释),并一直使用到每个先前的函数声明。我希望这可以帮助将来的其他人了解“回调”的功能。请询问您是否有任何问题,再次感谢= D。
function doCall(word, callback) {
dict.spellSuggestions(word, function(err, correct, suggestions, origWord) {
if (err) throw err;
// if (correct)
// console.log(origWord + ' is spelled correctly!');
// else
// console.log(origWord + ' not recognized. Suggestions: ' + suggestions);
val = {
err: err,
correct: correct,
origWord: origWord,
suggestions: suggestions
}
return callback(val);
});
}
function addMember(array, index, callback){
doCall(array[index], function(val){
// console.log(val);
// console.log(index);
// console.log(array[index]);
// console.log(val.origWord);
array[val.origWord] = val;
// console.log(array[val.origWord]);
index = index + 1;
return callback(array, index);
});
}
function Loop(array, index, callback) {
addMember(array, index, function(array2, index2){
// console.log(index);
// console.log(index2);
if(index2 === array2.length) {
return callback(array2);
}
else{
Loop(array2, index2, callback);
}
});
}
function analyze(array, index, callback){
Loop(array, index, function(complete_array){
console.log('!!!!!!!!!!!!!!!!!' + complete_array);
return callback(complete_array);
});
}
/*
analyze(words, 0, function(complete_array){
// for(i = 0; i < complete_array.length; i++) {
console.log(complete_array);
// }
});
*/
module.exports = {
analyze
}