teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

変数宣言部の修正

2020/03/06 06:40

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -17,6 +17,9 @@
17
17
  ご質問のタグには「TypeScript」があり、「IEサポートの継続 が要件にある」場合は、コールバックによる手法になりそうです。
18
18
 
19
19
  ```javascript
20
+ //private _feedItemCount=0
21
+ var _feedItemCount=0;
22
+
20
23
  function getFeedItems(url, callback) {
21
24
  var domParser = DOMParser();
22
25
  var xhr = new XMLHttpRequest();
@@ -47,4 +50,6 @@
47
50
  console.log( _feedItemCount )
48
51
  })
49
52
  ```
50
- ※TypeScript はよくわかってないので、TypeScript独特の文と感じた箇所をコメントアウトし、``JavaScript`` でサンプルを追記させていただきました。
53
+ ※TypeScript はよくわかってないので、TypeScript独特の文と感じた箇所をコメントアウトし、``JavaScript`` でサンプルを追記させていただきました。
54
+
55
+ もし、TypeScript でトランスパイル後、 ``undefined`` になるようでしたら、スコープも疑ってみてください。

1

コメントを受けて追記

2020/03/06 06:40

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -6,4 +6,45 @@
6
6
 
7
7
  対策は、次の2つです。
8
8
  1. async/await でフロー制御できる [fetchを使う](https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch)(PromiseベースのXHRと考える)。
9
- 2. 古典的な手法として、callback で変数への代入を検知する(あるいは、値を受け取る)。
9
+ 2. 古典的な手法として、callback で変数への代入を検知する(あるいは、値を受け取る)。
10
+
11
+ ----
12
+ コメントを受けて
13
+
14
+ fetch はモダン環境のJavaScriptにおいては標準です。
15
+ MDN [fetch ブラウザサポート状況](https://developer.mozilla.org/ja/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Browser_compatibility)
16
+
17
+ ご質問のタグには「TypeScript」があり、「IEサポートの継続 が要件にある」場合は、コールバックによる手法になりそうです。
18
+
19
+ ```javascript
20
+ function getFeedItems(url, callback) {
21
+ var domParser = DOMParser();
22
+ var xhr = new XMLHttpRequest();
23
+ xhr.open('GET',url);
24
+ xhr.send();
25
+
26
+ xhr.onreadystatechange = function() {
27
+ var feed_data, feed_items;
28
+ if(xhr.readyState === 4 && xhr.status === 200){
29
+
30
+ if(typeof(xhr.response) === 'string'){
31
+ try{
32
+ //var feed_data:Document = domParser.parseFromString(xhr.response, "text/html");
33
+ feed_data = domParser.parseFromString(xhr.response, "text/html");
34
+ feed_items = feed_data.getElementsByTagName('item');
35
+ }
36
+ //catch {}
37
+ catch(e) {}
38
+
39
+ callback( feed_items );
40
+ }
41
+ }
42
+ }
43
+ };
44
+
45
+ getFeedItems(feedURL, function( items ){
46
+ _feedItemCount += items.length;
47
+ console.log( _feedItemCount )
48
+ })
49
+ ```
50
+ ※TypeScript はよくわかってないので、TypeScript独特の文と感じた箇所をコメントアウトし、``JavaScript`` でサンプルを追記させていただきました。