たかったされたときに、私は次のコードNodeJSは同期が
var utils = require(`${__dirname}/../../utils/utils.js`);
...
let object = utils.parse(input);
if (object === undefined){
let helper = utils.recognize(input);
msg.channel.sendMessage("\"" + input + "\" not recognized. Did you mean \"" + helper[0] + "\"?");
object = utils.parse(helper[0]);
}
//code related to object
console.log(object.strLength);
「パース」は、データベース内のオブジェクトへの入力を一致させようと、「認識」ベストマッチを見つけようとする
を持って非同期機能を必要と入力が間違って綴られている場合(Levenshtein)(マッチの程度などの追加情報とともに)
現在のところ、コードは非同期で実行されるという問題があります。 "object.strLength"は、utils.recognize()が値を返す前に未定義を返します。認識()とパース()関数をファイルにコピー/ペーストすると、コードは同期的に実行され、問題は発生しません。しかし、私はむしろ別のファイルに再利用するので、これらの機能を別々のファイルに保存します。
utilsの機能を同期させる必要があることを指定する方法はありますか?私はasynchを同期に変換するライブラリがあることを知っていますが、私はそれを助けることができるライブラリをほとんど使用しません。私は認識機能にプロミスを返させようとしましたが、それは混乱した混乱として終わりました。
編集:here's parse。私は私が最初にそれが含まれていませんでした、この質問に答えるために必要だったとは思いませんでした:
var db = require(`${__dirname}/../data/database.js`);
...
var parse = (input) => {
let output = db[output];
if (output === null) {
Object.keys(db).forEach((item) => {
if (db[item].num === parseInt(input) || (db[item].color + db[item].type === input)){
output = db[item];
return false;
}
});
}
return output;
}
utils.parseのコードを表示する必要があります。 –
ええ、ok。私の変数名では少し自己意識を感じることはできません。 – JsKingBoo
parseは、完全に同期する方法のようです。私はなぜそれが突然になるかわかりません;別のモジュールに入っているからといって非同期になります。あなたのコードに何か他のものがあります。 –