Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9138

Node.jsでTop-Level Awaitを試す

$
0
0

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 

参考: Top-Level Await support in Node.js v14.3.0

補足: 今までの書き方

今までだと、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を基本とする流れでも良いのかな...? この辺気になります。


Viewing all articles
Browse latest Browse all 9138

Trending Articles