###概要
現在、javascriptとelectronを用いて、メモ帳アプリのようなものを作っています。
データベースへのアクセスに伴う非同期処理について、promiseの使い方がよく分からないので質問させてください。
また、classやconstructorの扱い方も、現在の形でいいのかどうか、やや不安を持っています。
###詳細
メモはSQLiteデータベースのpagesテーブルに保存されており、idとcontentを持っています。
メモ帳の画面にはlistとeditorがあり、listの項目(listItem)をクリックするとeditorに該当メモの内容が表示されます。
listItemにはidが格納されていて、クリック→データベースをidで検索→editorにcontentを表示、という流れになります。
私の書いたコードは、次のような感じです。
JavaScript
1class Page { 2 constructor(id) { 3 this.id = id; 4 db.get(`SELECT content FROM pages WHERE id=${id}`, function(err, row) { 5 this.content = row.content; 6 }); 7 } 8 9 show() { 10 $("#editor").html(this.content); 11 } 12} 13 14$(() => { 15 $("#listItem").click((event) => { 16 showPage($(event.currentTarget).attr("data-id")); 17 }); 18}); 19 20function showPage(id) { 21 const page = new Page(id); 22 page.show(); 23}
しかし、このコードの場合、データベースからcontentを取得する前にpage.show()が呼ばれてしまうため、うまく行きません。
最終行のpage.show;
をsetTimeout(() => {page.show;}, 100);
などにすると一応動作しますので、他の部分に問題はないと思われます。
promiseオブジェクトなどを用い、データベースへからの値の取得後に、page.show()が呼ばれるようにしたいです。
グローバル変数なpromiseオブジェクトを作ればとりあえずできるような気はしますが、まあ、ダメですよね。
いい方法があれば、ご教示願います。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/16 06:42