回答編集履歴
2
文章の流れを修正
test
CHANGED
@@ -22,41 +22,59 @@
|
|
22
22
|
|
23
23
|
そしてそこを書いてないって事は、
|
24
24
|
|
25
|
-
|
25
|
+
エスパー予測するならばこの位置に記載されているんだと思います。
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
+
```js
|
30
|
+
|
31
|
+
var gl_result = {};
|
32
|
+
|
33
|
+
app.get('/', (request, response ) =>{
|
34
|
+
|
35
|
+
const promise1 = new promise((resolve, reject)=>{
|
36
|
+
|
37
|
+
var sql = "select * from test";
|
38
|
+
|
39
|
+
con.query(sql, function(err, result){
|
40
|
+
|
29
|
-
|
41
|
+
if(err) return console.log(err);
|
42
|
+
|
43
|
+
gl_result = result;
|
44
|
+
|
45
|
+
// resolve(); // <- もしこの位置なら取れているはず
|
46
|
+
|
47
|
+
});
|
48
|
+
|
49
|
+
resolve(); // <- 多分ここにあるんでしょ?
|
50
|
+
|
51
|
+
})
|
52
|
+
|
53
|
+
// 中略
|
54
|
+
|
55
|
+
.then(() => {
|
56
|
+
|
57
|
+
console.log(gl_result); // ←ここで {} しか表示されない
|
58
|
+
|
59
|
+
})
|
60
|
+
|
61
|
+
});
|
62
|
+
|
63
|
+
```
|
30
64
|
|
31
65
|
|
32
66
|
|
33
|
-
|
67
|
+
Promiseに関しての知識がまだ足りてなさそうです。
|
68
|
+
|
69
|
+
もう少しPromiseとはなんぞやを勉強すれば先にすすめるでしょう。
|
34
70
|
|
35
71
|
|
36
72
|
|
37
|
-
|
73
|
+
しかし、このペースだと実務で使い物になるコードにたどり着くのはかなり先になりそうです。
|
38
74
|
|
39
|
-
|
75
|
+
Promiseとかコールバック関数とかノイズなんで出来れば削りたいところ。
|
40
76
|
|
41
|
-
|
42
|
-
|
43
|
-
参考記事: [node.js MySQLではなくMySQL2を使ったほうがいいみたい](https://cfautog.tokyo/2020/04/09/node-js-mysql2/)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
そしてPromiseを同期風に記述できるES7のasync/await 構文を学習しましょう。
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
- [async - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function)
|
52
|
-
|
53
|
-
- [await - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await)
|
54
|
-
|
55
|
-
- [ES7 Async Awaitのサンプル - mysql2のドキュメント](https://github.com/sidorares/node-mysql2/blob/master/documentation/Promise-Wrapper.md#es7-async-await)
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
77
|
+
なので先に完成形を見せます。
|
60
78
|
|
61
79
|
|
62
80
|
|
@@ -65,8 +83,6 @@
|
|
65
83
|
// app.js -> インデントをスペース2個にしてる
|
66
84
|
|
67
85
|
const mysql = require("mysql2/promise");
|
68
|
-
|
69
|
-
const gl_result = {};
|
70
86
|
|
71
87
|
|
72
88
|
|
@@ -89,6 +105,8 @@
|
|
89
105
|
|
90
106
|
|
91
107
|
app.set('ejs', ejs.renderFile);
|
108
|
+
|
109
|
+
|
92
110
|
|
93
111
|
// await構文を使うには、async関数であることが重要なので、
|
94
112
|
|
@@ -143,3 +161,31 @@
|
|
143
161
|
});
|
144
162
|
|
145
163
|
```
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
まずnpmのライブラリでmysqlを使っているならば、
|
168
|
+
|
169
|
+
とりあえず[mysql2](https://www.npmjs.com/package/mysql2)に乗り換えましょう。
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
参考記事: [node.js MySQLではなくMySQL2を使ったほうがいいみたい](https://cfautog.tokyo/2020/04/09/node-js-mysql2/)
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
そしてPromiseを同期風に記述できるES7のasync/await 構文を学習しましょう。
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
- [async - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function)
|
182
|
+
|
183
|
+
- [await - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await)
|
184
|
+
|
185
|
+
- [ES7 Async Awaitのサンプル - mysql2のドキュメント](https://github.com/sidorares/node-mysql2/blob/master/documentation/Promise-Wrapper.md#es7-async-await)
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
それを元に質問文で書かれているコードの部分をasync/await方式で記述しなおすと完成形のコードになります。
|
190
|
+
|
191
|
+
このコードを資本に色々と理解を深めてPromiseやasync/awaitを使いこなしていきましょう。
|
1
ぷち修正
test
CHANGED
@@ -124,6 +124,10 @@
|
|
124
124
|
|
125
125
|
} catch (e) {
|
126
126
|
|
127
|
+
// エラー処理は1個の大きなtry-catchで包んでいる
|
128
|
+
|
129
|
+
// これもasync関数の恩恵で、Promise.catchの糖衣構文になっている
|
130
|
+
|
127
131
|
console.error(e);
|
128
132
|
|
129
133
|
}
|
@@ -132,9 +136,9 @@
|
|
132
136
|
|
133
137
|
|
134
138
|
|
135
|
-
app.listen(3000,() =>{
|
139
|
+
app.listen(3000, () => {
|
136
140
|
|
137
|
-
|
141
|
+
console.log('server start');
|
138
142
|
|
139
143
|
});
|
140
144
|
|