質問: Loadtext();`をstrとして読みたいのですが、`undefined`になってしまいます。 `Loadtext();`と関数にしたのは、任意のタイミングでテキストを取得できるようにしたいからなのですが(あるbuttonで押したらテキストを取得する等)strがかえってこないと困ってしまいます。 これはなぜなのでしょう?また解決策はありますか・・・? javascriptは独特すぎて戸惑っています。
回答: モダンなブラウザならfetchとかで処理してみてはどうでしょうか? ``` (async()=>{ var sentences; await fetch(text).then(res=>res.text()).then(res=>{sentences=res}); console.log(sentences); })(); ``` 参考 == ご提示のソースを活かす場合 * Loadtext()をasyncにする * xhrをreturnする の2点工夫が必要です。 その上でLoadtext()のthenで戻り値を受けます あえてsentencesに受ける必要はありません どうしても受ける場合はfetchの例にあるようなasnyc/awaitで処理が必要です ``` async function Loadtext() { var xhr = new XMLHttpRequest(); xhr.open("GET", text, true); xhr.onreadystatechange = function () { if(xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText);//きちんとテキストが出力される。 console.log(typeof xhr.responseText);//きちんとstrになっている。 return xhr.responseText; } }; xhr.send(); return xhr; } Loadtext().then(res=>typeof res.responseText).then(console.log); ```