はじめに
プログラミング初心者です。
JavaScriptの勉強のため、あるアプリのサンプルプログラムのJavaScript(おそらくjQuery)のコードを見ていたら、Promiseというオブジェクトが登場しました。
今回は、Promiseというオブジェクトと、doneというメソッド(?)が、一言で言ってどういう動作をするものなのか知りたくて質問させて頂きました。
### 事の経緯
勉強のために参考にしていたアプリというのは、
MonacaというクラウドIDEサービスを利用して作られた『メモ帳アプリ』です。
https://docs.monaca.io/ja/sampleapp/samples/backend_memo/#%E3%83%A1%E3%83%A2%E3%81%AE%E8%BF%BD%E5%8A%A0
メモの内容の保存先として、Monaca Backendという独自のデータベースを利用しており、
そのデータベースのAPI(=独自のオブジェクト群)を利用して、データベース内のメモデータの編集(読み書き)をしたり、新規作成したり、といった操作をする、
という形になっています。
Promiseの登場場面
以下は、上記のメモ帳アプリの解説ページにて、「メモの追加」という項目について、ソースコードを抜粋して解説した記事になります。以下のソースコードの14行目に問題の「done」というメソッド(?)が登場します。
メモの追加
追加ページ上で Save ボタンを押したときに、onSaveBtn() を呼び出します。次に、ページ上で入力された title と content の値を、 addMemo() 関数に渡します。
この関数では、 monaca.cloud.Collection().insert() ( Monaca バックエンド API ) を使用して、 Memo コレクションに、コレクションアイテムを挿入します。
javaScript
1function onSaveBtn() 2{ 3 var title = $("#title").val(); 4 var content = $("#content").val(); 5 if (title != '') 6 { 7 addMemo(title,content); 8 } 9} 10 11function addMemo(title,content) { 12 var memo = MC.Collection("Memo"); 13 14 memo.insert({ title: title, content: content}) 15 .done(function(insertedItem) 16 { 17 console.log('Insert is success!'); 18 $("#title").val(""); 19 $("#content").val(""); 20 //display a dialog stating that the inserting is success 21 $( "#okDialog_add" ).popup("open", {positionTo: "origin"}).click(function(event) 22 { 23 event.stopPropagation(); 24 event.preventDefault(); 25 getMemoList(); 26 $.mobile.changePage('#ListPage'); 27 }); 28 }) 29 .fail(function(err){ console.log('Insert failed!');}) 30}
「done」の一つ手前にある「insert」というAPI独自のオブジェクトの使い方を調べるため、次の解説ページを確認することにしました。https://docs.monaca.io/ja/reference/monaca_api/cloud/collection/#collection-insert
すると、どうやら、この「done」というのは「Promise」というJavaScriptのオブジェクト(というよりjQuery?)のメソッドのようなものだということがわかりました。
Promiseとは?doneとは?
検索にかけてみると、「非同期処理でつかう」「コールバック関数」というフレーズが出てきたのですが、「どういうもので、どういう場面でどんな風に使うものなのか」よくわかりませんでした。(そもそも、コールバック関数を知りません)
Promiseとdoneの解説をしている記事はもちろん色々あるのですが、どの記事も今の私のレベルを超えた予備知識を前提としているような雰囲気で、よくわかりませんでした。
なので、
とりあえず、このプログラムのこの場面に限定して「doneというものがどういう役割を果たしているのか?」を簡潔にご教示頂きたいです。宜しくお願いします。
蛇足~勉強のやり方としてどうなのか~
どうやら、プログラミングというものは、基本のキ的な入門書を読んだ後は、次のステップといったものが特にないらしく、『能動学習的叩き上げ』で勉強していくものらしいので、
突然大海に放り出された気分ですが、
とりあえずアプリを作ってみるか、と考え、やっています。
しかし、そもそも非同期処理やコールバック関数という予備知識も知らないのに、いきなり3歩4歩先の概念であるPromiseというものが出てきてしまうと、さすがに詰まってしまい、勉強効率も落ちます。(1歩2歩さきならいいですが、3歩4歩は飛びすぎで困ります)
「もう少しステップアップ式にできないものなのか…」と思ってしまいました。
回答5件
あなたの回答
tips
プレビュー