質問が正しいかどうかわからない。より良い理解のために問題を説明しましょう。ランダムな英語の文字列をキーとして複数レベルのjsonオブジェクトを考えてみましょう。タスクは、オブジェクトを反復し、すべてのノードを訪問して、以前と同じ親オブジェクトを持つ同じキー(およびレベル)を持つ英語の文字列の翻訳されたテキストを含む別の同等のオブジェクトを作成することです。再帰を使用すると、翻訳は機能しますが、約束の中から最終翻訳オブジェクトを返すことは決してありません。しかし、エラーはありません。再フォーマットされたjsonオブジェクトをループして非同期の約束の呼び出しを行う方法
オブジェクト:
var obj = {
"MENU": {
"NODE": "Wait for her",
"RESPONSE": {
"ATTR": "We'll meet again",
"SEMANTICS": "The Dark Knighthood"
}
},
"NODES": {
"STANDARDLIBRARY": {
"SERVER": "Never say never again",
"CATEGORIES":{
"INFOPROTECTION":"Infoprotection",
"DATAMOTION":"Data In Motion",
"LOGGING":"Loggin is key to debugging",
"VERACITY": "Help me understand the best I can",
"VARIETY": "Silver surfer"
}
}
}
};
コード:
const iterateAttributesAndParseJSON = (o) => {
return new Promise(
function (resolve, reject) {
for(var a in o) {
if (typeof o[a] == 'object'){
iterateAttributesAndParseJSON(o[a])
}else{
if(o[a] != '') {
translate(o[a], {from: 'en', to: 'nl'}).then(res => {
//return jsonObj[a]=res.text;
jsonObj[a]=res.text;
//console.log(jsonObj);
resolve(jsonObj);
}).catch(err => {
console.error(err)
reject(err);
});
}
}
}
}
);
}
iterateAttributesAndParseJSON(obj).then(asd => { console.log(`Resolved:`, asd) }, err => console.log(err))
注:翻訳再びthenableです。私はこのnpmモジュールを使用しました。 google-translate-api
おそらく私は何かが不足していますが、翻訳の呼び出し後すぐにあなたはリターンを呼び出しています。それは、次の3行が実行されないことを意味しません(resolve()を含む)? –
今すぐご確認ください。元のコードでは、返品がコメントされました。私はここにそれを貼り付ける間違いを開いた。 –
この時点で私が知ることができるのは、再帰呼び出しの後に解決していないということだけです。私にとっては、「解決済み」という出力は得られません。コンソールログだけが機能内に記録されます。しかし、それはここに遅れて、私はその日のためにそれを梱包しなければなりません。運が良ければ、問題は面白いので明日それを見るかもしれません。 –