質問編集履歴

4

promise初心者であることを追記

2016/06/14 01:07

投稿

TEA
TEA

スコア65

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- promiseの記述方法が正しいか分からなかったのでご質問させてください。環境はnode.js v4.3です。
1
+ promise初心者です。promiseの記述方法がこれで正しいか分からなかったのでご質問させてください。環境はnode.js v4.3です。
2
2
 
3
3
 
4
4
 
@@ -210,7 +210,15 @@
210
210
 
211
211
 
212
212
 
213
- taskB_Workの処理内容は実際には以下のようなものを考えています。改行区切りURLが保存されているテキストファイルを開き(taskA)、taskBを実行後に、新たに取得したURLをテキストファイルで出力する(taskC)という処理です。
213
+ taskB_Workの処理内容は実際には以下のようなものを考えています。全体の処理の概要は、
214
+
215
+ - taskA : 改行区切りのURLが保存されているテキストファイルを開き、URLを配列要素に格納
216
+
217
+ - taskB : 各配列要素のURLに対して、flickrapiを実行
218
+
219
+ - taskC : 新たに取得したURLをテキストファイルで出力
220
+
221
+ という流れです。
214
222
 
215
223
 
216
224
 

3

taskB_Workの具体的内容を追記しました

2016/06/14 01:07

投稿

TEA
TEA

スコア65

test CHANGED
File without changes
test CHANGED
@@ -207,3 +207,99 @@
207
207
  });
208
208
 
209
209
  ```
210
+
211
+
212
+
213
+ taskB_Workの処理内容は実際には以下のようなものを考えています。改行区切りのURLが保存されているテキストファイルを開き(taskA)、taskBを実行後に、新たに取得したURLをテキストファイルで出力する(taskC)という処理です。
214
+
215
+
216
+
217
+ ``` javascript
218
+
219
+
220
+
221
+ // flickrのリサイズ画像URL(inPhotoURL)を元に、オリジナルサイズの画像URLを取得する。
222
+
223
+ /*
224
+
225
+ var FlickrAPI = require("flickrapi");
226
+
227
+ var flickrApiOptions = {
228
+
229
+ api_key : process.env.api_key,
230
+
231
+ secret : process.env.secret,
232
+
233
+ permissions : process.env.permissions,
234
+
235
+ user_id : process.env.user_id,
236
+
237
+ access_token : process.env.access_token,
238
+
239
+ access_token_secret: process.env.access_token_secret
240
+
241
+ };
242
+
243
+ */
244
+
245
+ function taskB_Work(inPhotoURL){
246
+
247
+ return new Promise(function(resolve, reject) {
248
+
249
+ FlickrAPI.authenticate(flickrApiOptions, function(error, flickr) {
250
+
251
+
252
+
253
+ var matchPat = inPhotoURL.match(/(https:\/\/farm[0-9]\.staticflickr\.com\/[0-9]+\/)([0-9]+)_([0-9a-z]+)[0-9a-z_]*\.jpg/);
254
+
255
+
256
+
257
+ var parameter = {
258
+
259
+ "api_key" : flickrApiOptions.api_key ,
260
+
261
+ "photo_id" : matchPat[2],
262
+
263
+ "secret" : matchPat[3]
264
+
265
+ };
266
+
267
+
268
+
269
+ if(!error){
270
+
271
+ // getInfoにより、originalsecretとoriginalformatを取得
272
+
273
+ // (getInfo) https://www.flickr.com/services/api/flickr.photos.getInfo.html
274
+
275
+ flickr.photos.getInfo(parameter, function(err, result) {
276
+
277
+ if(err) {
278
+
279
+ reject("flickr APIの実行に失敗しました : " + err);
280
+
281
+ }else{
282
+
283
+ resolve(matchPat[1] + matchPat[2] + "_"+ result.photo.originalsecret +"_o."+ result.photo.originalformat);
284
+
285
+ }
286
+
287
+ });
288
+
289
+ }else{
290
+
291
+ reject("flickr APIの認証に失敗しました :" + error);
292
+
293
+ }
294
+
295
+ });
296
+
297
+
298
+
299
+ });
300
+
301
+ }
302
+
303
+
304
+
305
+ ```

2

コードについて、関数内部で変数を定義するよう変更しました

2016/06/14 00:48

投稿

TEA
TEA

スコア65

test CHANGED
File without changes
test CHANGED
@@ -32,23 +32,17 @@
32
32
 
33
33
  ``` javascript
34
34
 
35
- var Arr, Arr_edited;
36
-
37
- Arr = [];
38
-
39
- Arr_edited = [];
40
-
41
35
 
42
36
 
43
37
  // 配列の取得を行うタスク
44
38
 
45
39
  function taskA() {
46
40
 
47
- return new Promise(function(resolve, reject) {
41
+ return new Promise(function(resolve, reject) {
48
-
42
+
49
- Arr = ["a","b","c","d","e"];
43
+ var Arr = ["a","b","c","d","e"];
50
-
44
+
51
- resolve();
45
+ resolve(Arr);
52
46
 
53
47
  });
54
48
 
@@ -58,35 +52,41 @@
58
52
 
59
53
  // taskAで取得した値を加工するタスク
60
54
 
61
- function taskB() {
55
+ function taskB(arr) {
56
+
57
+ var editedArr = [];
62
58
 
63
59
  return new Promise(function(resolve, reject) {
64
60
 
65
- return Arr.reduce(function(promise, value) {
61
+ return arr.reduce(function(promise, value) {
66
-
62
+
67
- return promise.then(function() {
63
+ return promise.then(function() {
68
-
64
+
69
- return taskB_Work(value);
65
+ return taskB_Work(value);
66
+
70
-
67
+ }).then(function(editedElement){
68
+
69
+ editedArr.push(editedElement);
70
+
71
- });
71
+ });
72
-
72
+
73
- }, Promise.resolve())
73
+ }, Promise.resolve() )
74
-
74
+
75
- .then(
75
+ .then(
76
-
76
+
77
- function(){
77
+ function(){
78
-
78
+
79
- resolve();
79
+ resolve(editedArr);
80
-
80
+
81
- },
81
+ },
82
-
82
+
83
- function(){
83
+ function(){
84
-
84
+
85
- reject("taskB 処理に失敗");
85
+ reject("taskB 処理に失敗");
86
-
86
+
87
- }
87
+ }
88
-
88
+
89
- );
89
+ );
90
90
 
91
91
  });
92
92
 
@@ -94,6 +94,8 @@
94
94
 
95
95
 
96
96
 
97
+
98
+
97
99
  // taskBのreduceで呼び出され、配列要素に対して行う処理
98
100
 
99
101
  function taskB_Work(value){
@@ -104,14 +106,10 @@
104
106
 
105
107
  console.log("[taskB_Work] value="+value);
106
108
 
107
- Arr_edited.push(value + "_edited");
109
+ resolve(value + "_edited");
108
-
109
- resolve();
110
110
 
111
111
  }, 2000);
112
112
 
113
-
114
-
115
113
  });
116
114
 
117
115
  }
@@ -120,13 +118,13 @@
120
118
 
121
119
  // taskBで加工した配列の値を出力するタスク
122
120
 
123
- function taskC() {
121
+ function taskC(editedArr) {
124
122
 
125
123
  return new Promise(function(resolve, reject) {
126
124
 
127
125
  console.log("[taskC]:");
128
126
 
129
- console.log(Arr_edited);
127
+ console.log(editedArr);
130
128
 
131
129
  resolve();
132
130
 
@@ -136,15 +134,17 @@
136
134
 
137
135
 
138
136
 
137
+
138
+
139
+
140
+
139
141
  //逐次処理を行う
140
142
 
141
143
  function sequenceTasks(tasks) {
142
144
 
143
145
  function recordValue(results, value) {
144
146
 
145
- results.push(value);
146
-
147
- return results;
147
+ return value;
148
148
 
149
149
  }
150
150
 
@@ -168,15 +168,15 @@
168
168
 
169
169
  },
170
170
 
171
- doTaskB: function() {
171
+ doTaskB: function(arr) {
172
-
172
+
173
- return taskB().then();
173
+ return taskB(arr).then();
174
174
 
175
175
  },
176
176
 
177
- doTaskC: function() {
177
+ doTaskC: function(editedArr) {
178
-
178
+
179
- return taskC().then();
179
+ return taskC(editedArr).then();
180
180
 
181
181
  }
182
182
 
@@ -192,11 +192,13 @@
192
192
 
193
193
 
194
194
 
195
+
196
+
195
197
  main().then(function(value) {
196
198
 
197
199
  console.log("complete!");
198
200
 
199
- //function taskB_Work(value)記述する処理内容によっては、逐次処理がここまで進むものの、プロセスが終了しない事がありました
201
+ //function taskB_Work(value)`で記述する処理によっては、逐次処理がここまで進むものの、プロセスが終了しない事がありま
200
202
 
201
203
  }).catch(function(error) {
202
204
 

1

引用の追加,誤字修正

2016/06/13 08:00

投稿

TEA
TEA

スコア65

test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,12 @@
24
24
 
25
25
 
26
26
 
27
+ > 参考記事: Qiita | Promiseについて0から勉強してみた
28
+
29
+ > [http://qiita.com/toshihirock/items/e49b66f8685a8510bd76](http://qiita.com/toshihirock/items/e49b66f8685a8510bd76)
30
+
31
+
32
+
27
33
  ``` javascript
28
34
 
29
35
  var Arr, Arr_edited;
@@ -190,7 +196,7 @@
190
196
 
191
197
  console.log("complete!");
192
198
 
193
- //function taskB_Work(value)`で記述する処理によっては、逐次処理がここまで進むものの、プロセスが終了しない事がありま
199
+ //function taskB_Work(value)記述する処理内容によっては、逐次処理がここまで進むものの、プロセスが終了しない事がありました
194
200
 
195
201
  }).catch(function(error) {
196
202