カテゴリー
【javascript基礎講座】クラスコンストラクタの内部で async/await を使う時の注意
※ 当ページには【広告/PR】を含む場合があります。
2020/06/29
2022/10/03
コンストラクタにasyncは付けられない
class HogeClass {
async constructor(hoge) {
// Promiseを返すなんらかのメソッド
this.hogeContent = await initHogeAsync(hoge);
}
}
//...
const hogeInstance = new HogeClass('hoge'); // Error!
async
Promise
async
await
async/awaitの初期化で困った時のFactoryライクなメソッド
class HogeClass {
// こちらのコンストラクタにはawaitで呼び出ししない
constructor() {}
static async hogeFactorywise(hoge) {
const obj = new Hoge();
// Promiseを返すなんらかのメソッド
obj.hogeContent = await initHogeAsync(hoge);
return obj;
}
}
//...
const hogeInstance = await HogeClass.hogeFacorywise('hoge');
async
応用例 ~ Tensorflowjsのメソッド
Promise<T>
await
const model = await tf.loadLayersModel(
'https://storage.googleapis.com/tfjs-models/tfjs/iris_v1/model.json'
);
model.summary();
import * as tf from '@tensorflow/tfjs';
export class HogeAsyncClass {
config: any;
decodedLayerModel: any;
/**
* staticなfactoryのような関数はconstructorの前に定義することが
* 作法として推奨されいるようなので、この位置でメソッド定義
*/
static async hogeFactorywise(args?: any): Promise<HogeAsyncClass> {
const hogeObj = new HogeAsyncClass(args);
// 👇Promiseから取り出したデータで初期化している
hogeObj.decodedLayerModel = await tf.loadLayersModel('<...モデルを保存した場所までのディレクトリパス>/model.json');
return hogeObj;
}
constructor(args?: any) {
this.config = args.config;
}
}
const hogeInstance = await HogeAsyncClass.hogeFacorywise(<...通常のコンストラクタ引数>);
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー