回答編集履歴

2

変数宣言部の修正

2020/03/06 06:40

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -35,6 +35,12 @@
35
35
 
36
36
 
37
37
  ```javascript
38
+
39
+ //private _feedItemCount=0
40
+
41
+ var _feedItemCount=0;
42
+
43
+
38
44
 
39
45
  function getFeedItems(url, callback) {
40
46
 
@@ -97,3 +103,7 @@
97
103
  ```
98
104
 
99
105
  ※TypeScript はよくわかってないので、TypeScript独特の文と感じた箇所をコメントアウトし、``JavaScript`` でサンプルを追記させていただきました。
106
+
107
+
108
+
109
+ もし、TypeScript でトランスパイル後、 ``undefined`` になるようでしたら、スコープも疑ってみてください。

1

コメントを受けて追記

2020/03/06 06:40

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -15,3 +15,85 @@
15
15
  1. async/await でフロー制御できる [fetchを使う](https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch)(PromiseベースのXHRと考える)。
16
16
 
17
17
  2. 古典的な手法として、callback で変数への代入を検知する(あるいは、値を受け取る)。
18
+
19
+
20
+
21
+ ----
22
+
23
+ コメントを受けて
24
+
25
+
26
+
27
+ fetch はモダン環境のJavaScriptにおいては標準です。
28
+
29
+ MDN [fetch ブラウザサポート状況](https://developer.mozilla.org/ja/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Browser_compatibility)
30
+
31
+
32
+
33
+ ご質問のタグには「TypeScript」があり、「IEサポートの継続 が要件にある」場合は、コールバックによる手法になりそうです。
34
+
35
+
36
+
37
+ ```javascript
38
+
39
+ function getFeedItems(url, callback) {
40
+
41
+ var domParser = DOMParser();
42
+
43
+ var xhr = new XMLHttpRequest();
44
+
45
+ xhr.open('GET',url);
46
+
47
+ xhr.send();
48
+
49
+
50
+
51
+ xhr.onreadystatechange = function() {
52
+
53
+ var feed_data, feed_items;
54
+
55
+ if(xhr.readyState === 4 && xhr.status === 200){
56
+
57
+
58
+
59
+ if(typeof(xhr.response) === 'string'){
60
+
61
+ try{
62
+
63
+ //var feed_data:Document = domParser.parseFromString(xhr.response, "text/html");
64
+
65
+ feed_data = domParser.parseFromString(xhr.response, "text/html");
66
+
67
+ feed_items = feed_data.getElementsByTagName('item');
68
+
69
+ }
70
+
71
+ //catch {}
72
+
73
+ catch(e) {}
74
+
75
+
76
+
77
+ callback( feed_items );
78
+
79
+ }
80
+
81
+ }
82
+
83
+ }
84
+
85
+ };
86
+
87
+
88
+
89
+ getFeedItems(feedURL, function( items ){
90
+
91
+ _feedItemCount += items.length;
92
+
93
+ console.log( _feedItemCount )
94
+
95
+ })
96
+
97
+ ```
98
+
99
+ ※TypeScript はよくわかってないので、TypeScript独特の文と感じた箇所をコメントアウトし、``JavaScript`` でサンプルを追記させていただきました。