01. Promiseの作成と実行

Promiseの作成

 const p = new Promise((resolve, reject) => { // (0) Promiseオブジェクトの作成
   // (1) ここで実行したい処理を実行する(多くの場合、非同期処理の実行をする)
   db.query("SELECT * FROM users", (rows) => {
       // (2) 処理を終えて、resolveまたはrejectして、メッセージを返す
       if (rows) {
           resolve({rows:rows, mesg:"処理が成功しました"});
       } else {
           reject("処理が失敗しました");
       }       
   }
 
 });
  • (0)でPromiseオブジェクトを作成しているが、一般的にnewする際に引数に関数を指定して、
  • (1)で実行したい処理を実行する(多くの場合は非同期処理の実行になる)
  • (2)で処理が成功したならresolve(解決)して、失敗したならrejectする
  • 現実的には、例えばsetTimeout()、fs.readFile()、XMLHttpRequestのような非同期関数を実行して、そのコールバックの中でresolveすることになるのが一般的
  • ここではresolve()とreject()の引数には文字列のにメッセージを指定しているが、数値でも配列でもオブジェクトでもなんでもよい
  • 例えば、fs.readFile()なら読み込んだファイル内のテキスト、XMLHttpRequestならHTTP GETしたHTTPレスポンスオブジェクトなどがresolve()の引数になり、それらのエラーコードがreject()の引数になる
  • なお、resolveは必須だが、rejectはなくともよい

Promiseの実行

 p.then(message => {                       // (1)
   console.log("resolveされた " + message);
 }).catch(errorMessage => {                // (2)
   console.error("rejectされた " + errorMessage);
 });
  • (1)でPromise.then()でPromise内の処理を実行して、Promiseの結果としてmessageを受け取る
  • (2)で、もしPromiseが解決されなかった場合の結果としてerrorMessageを受け取る

参考

MDN - Promise
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2019-11-04 (月) 15:22:45