Node.jsでTop-Level Awaitがサポートされ(て)たので、非同期通信と言えばなaxiosで試してみます。
Top-Level Await
今まではawaitを利用する際に、async関数内じゃないと使えませんでしたが、async関数を宣言せずにawaitを使えるようになります。
v14.3.0でサポート、v14.8.0でフラグなし
Top-Level AwaitはNode.js v14.3.0でサポートされましたが、この時点だと--experimental-top-level-await
のフラグを付けて実行する必要がありました。
v14.8.0以降でフラグ無しで利用できます。
axiosで利用してみる
(一応)今回試した環境はNode.js v14.14.0です。
package.jsonに"type": "module"
を追記して利用できます。
また、拡張子をmjsにするだけでも利用できます。
$ npm init -y$ npm i axios
app.mjs
を作成
ES Modules形式でimportします。
app.mjs
importaxiosfrom'axios';constres=awaitaxios.get(`https://protoout.studio`);console.log(res.data);
めちゃシンプルに書けますね。
- 実行
$ node app.js
補足: 今までの書き方
今までだと、CommonJS 形式でモジュールを読み込み、async関数の中でawait呼び出しをするというのが通常だったと思います。
app.js
'use strict;'constaxios=require('axios');(async()=>{constres=awaitaxios.get('https://protoout.studio');console.log(res.data);})();
あと'use strict;'
の表記もありますね。ESM形式だとStrictモードがデフォルトで有効なので省略できてます。
所感
ちょっとしたことを試す時にasync関数を書くのは結構めんどくさかったので、Top-Level Awaitはありがたいですね。
Common JS(require)からES Modules(impot/from)への移行の流れもあるのでちょっとしたところから慣れていきたい。
.jsを使わずに.mjsを基本とする流れでも良いのかな...? この辺気になります。