これはブログです

3DCGとかプログラミングとか

JavaScriptの非同期処理について

作っているアプリでJSONを読み込んでからNeDBにアクセスしようとしたのですが、javascriptの非同期処理の影響かでJSONを読み込む段階で次のJOB(NeDBにアクセス)に移行してしまい、実行するたびにずっとundefinedのdbファイルが生成(もしくは読み込み)されていました。

JSONには読み込むべきdbファイルが書かれているので、JSONの読み込み処理が完了してからNeDBのアクセス処理をしたいのですが、そんなにチェインしないとはいえコールバックは使いたくないのでPromiseを使うことにしました。

下記にコードを載せますが、データなしの場合はrejectを返してonloadでcatchでメッセージを出すべきですね…。

window.onload = () => {
    readConfigFile().then(() => loadNedb());
}
const readConfigFile = () => {
    return new Promise((resolve, reject) =>{
        const storage = require('electron-json-storage');
        const path = require('path');

        storage.setDataPath(path.resolve(''));
        storage.get('colon.json', (error, data) =>  {

            if (error) throw error;

            if (Object.keys(data).length === 0) {
                // データなし
            } else {
                // データあり
                resolve();
            }
        });
    })
}

参考:JavaScriptの同期、非同期、コールバック、プロミス辺りを整理してみる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください