回答編集履歴

1

修正&追記

2018/11/28 03:15

投稿

karamarimo
karamarimo

スコア2551

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 非同期に呼び出される関数は、少なくとも現在のコールスタックが空になるまで呼び出されることはありません。今の場合、`T.get()`のコールバック(`(err, data, response) => {...}`の部分)は3回設定されるわけですが、これらは少なくとも`for`文が終わったあと、任意の順番で実行されます。
5
+ 非同期に呼び出される関数は、少なくとも現在のコールスタックが空になるまで呼び出されることはありません。今の場合、`T.get()`のコールバック(`(err, data, response) => {...}`の部分)は3回設定されるわけですが、これらは少なくとも`for`文が終わったあと、任意の順番で実行されます。検索結果が3回とも同じになるのも、`for`文内で`lastId`は`''`のままなので`params`の更新ができていないことが原因です。
6
6
 
7
7
 
8
8
 
@@ -14,37 +14,37 @@
14
14
 
15
15
 
16
16
 
17
- > 検索結果(3回とも同じ結果)出てきます。
17
+ テストしてないです、以下のコードのようにでると思います。
18
-
19
-
20
-
21
- これは別の原因です。
22
18
 
23
19
 
24
20
 
25
21
  ```js
26
22
 
27
- let params = {
23
+ !(async () => {
28
24
 
29
- q: '#ハッシュタグ since:2018-11-28_00:00:00_JST until:2018-11-28_00:30:00_JST',
25
+ for (let i = 0; i < 3; i++) {
30
26
 
31
- count: 3,
27
+ params.max_id = lastId
32
28
 
33
- max_id: lastId,
29
+ const result = await T.get('search/tweets', params)
34
30
 
35
- result_type: 'recent',
31
+ result.data.statuses.forEach(function (val, index, ar) {
36
32
 
37
- include_entities: false
33
+ console.log(index);
38
34
 
35
+ console.log('@' + val.user.screen_name);
36
+
37
+ console.log(val.text);
38
+
39
+ lastId = val.id.str
40
+
41
+ })
42
+
39
- }
43
+ }
44
+
45
+ })()
40
46
 
41
47
  ```
42
-
43
- と`params`はなっているので、`max_id` property の値はこの時点での`lastId`の評価された値`''`になります。このあと`lastId`の値を変えても意味はありません。
44
-
45
-
46
-
47
- そのため、`params`の値を自分で変えるなどする必要があります。
48
48
 
49
49
 
50
50