URLが複数含まれる配列をループで回しながら、
URLごとにHTMLを取得し、そのHTMLから取得したデータを1つの配列として返す、という処理を実装したいです。
■呼び出し元
JavaScript
1let titles = getPageTitle(links); 2console.log("titles : " + JSON.stringify(titles));
■データ取得処理
JavaScript
1const getPageTitle = (links: Array) => { 2 console.log("getPageTitle start"); 3 let titles = []; 4 for (let i = 0; i < links.length; i++ ) { 5 const url = links[i]; 6 console.log("url : " + url); 7 const pageContent = fetchHtml(url); 8 if (pageContent != null) { 9 pageContent.then(function(value) { 10 console.log("--------------------------------------------------"); 11 let parser = new DOMParser() 12 let doc = parser.parseFromString(value, 'text/html'); 13 let title = doc.title; 14 console.log("title : " + title); 15 console.log("--------------------------------------------------"); 16 titles.push({title:title}); 17 }); 18 } else { 19 console.log("pageContent is null"); 20 } 21 } 22 console.log("getPageTitle end"); 23 return titles; 24}
ところが、上記のコードを実行すると下記のように、
先に呼び出し元のconsole.logが呼び出されてしまいます。
■現在の挙動
getPageTitle start url : /sample1.html url : /sample2.html getPageTitle end titles : [] -------------------------------------------------- title : サンプルタイトル1 -------------------------------------------------- -------------------------------------------------- title : サンプルタイトル2 --------------------------------------------------
これを下記のような挙動にしたいのですがどうしたら良いでしょうか?
ご存知の方がいらっしゃいましたらどうかアドバイスをお願いいたします。
■期待する挙動
getPageTitle start url : /sample1.html url : /sample2.html -------------------------------------------------- title : サンプルタイトル1 -------------------------------------------------- -------------------------------------------------- title : サンプルタイトル2 -------------------------------------------------- getPageTitle end titles : [{"title":"サンプルタイトル1"}, {"title":"サンプルタイトル2"}]
利用しているライブラリは下記の通りです。
- Node.js
- React
- Redux-Observable
- Redux
- RxJS
- Next.js
- isomorphic-fetch
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/15 14:16