回答編集履歴

1

回答の追加

2018/08/21 09:12

投稿

Meganezaru
Meganezaru

スコア715

test CHANGED
@@ -3,3 +3,153 @@
3
3
 
4
4
 
5
5
  childBのpromiseをreturnして、parent側で、戻されたpromiseに対して.thenする感じで、処理できませんか?
6
+
7
+
8
+
9
+ ### 追記
10
+
11
+
12
+
13
+ 若干怪しいところがあるかもしれませんが・・・
14
+
15
+ 概ねこんなイメージでしょうか?
16
+
17
+
18
+
19
+ (説明に不要と思った部分は、オリジナルソースから省略しました)
20
+
21
+
22
+
23
+ ```
24
+
25
+ function parent () {
26
+
27
+ // parentのDeferredオブジェクト作成
28
+
29
+ var parent_dfd = new $.Deferred();
30
+
31
+
32
+
33
+ // 最終的に `parent` を外のjsから実行した時の return に利用したい
34
+
35
+ var result = [];
36
+
37
+
38
+
39
+ function childA () {
40
+
41
+
42
+
43
+ var d = new $.Deferred();
44
+
45
+
46
+
47
+ // Ajax
48
+
49
+ $.ajax({
50
+
51
+ url: jsonpA,
52
+
53
+ })
54
+
55
+ .then( function( res ) {
56
+
57
+ ...
58
+
59
+
60
+
61
+ d.resolve();
62
+
63
+ });
64
+
65
+
66
+
67
+ return d.promise();
68
+
69
+
70
+
71
+ }
72
+
73
+
74
+
75
+ function childB () {
76
+
77
+
78
+
79
+ // Ajax
80
+
81
+ $.ajax({
82
+
83
+ url: jsonpB,
84
+
85
+ })
86
+
87
+ .then( function ( res ) {
88
+
89
+
90
+
91
+ $( useB ).each( function (index, el) {
92
+
93
+
94
+
95
+ result.push({
96
+
97
+ 'test01' : el.element01,
98
+
99
+ 'test02' : el.element02
100
+
101
+ });
102
+
103
+
104
+
105
+ });
106
+
107
+
108
+
109
+ // parentのDeferredを解決
110
+
111
+ parent_dfd.resolve(result);
112
+
113
+
114
+
115
+ });
116
+
117
+ }
118
+
119
+
120
+
121
+ childA()
122
+
123
+ .then(childB);
124
+
125
+
126
+
127
+ return parent_dfd.promise();
128
+
129
+ }
130
+
131
+
132
+
133
+ // windowオブジェクトに追加して外部jsから呼び出せるようにする
134
+
135
+ window.parent = parent();
136
+
137
+
138
+
139
+ });
140
+
141
+ ```
142
+
143
+
144
+
145
+ 以下、呼び出し側
146
+
147
+ ```
148
+
149
+ parent().then(function (result) {
150
+
151
+ //resultの処理
152
+
153
+ });
154
+
155
+ ```