2017年3月3日金曜日

今更ながら Promiss を学習した

概要

今更ながら Promiss について勉強したのでメモしておきます
この を参考に学習しただけなので目新しい情報はないかもしれません

環境

  • Mac OS X 10.11.4
  • Nodejs 5.9.1

非同期処理 Promiss

Promiss を使った学習用のスクリプトは以下の通りです

  • vim promiss.js
var promiseBuyApple = function(payment){
  return new Promise(function(resolve, reject){
    if (payment >= 150) {
      resolve({'fee': (payment - 150), 'msg': 'OK'});
    } else {
      reject({'fee': 0, 'msg': '金額が足りません。'});
    }
  });
}

promiseBuyApple(400).then(function(change){
  console.log('おつりは' + change.fee + '円です');
  console.log(change.msg)
  return promiseBuyApple(change.fee)
}).then(function(change){
  console.log('おつりは' + change.fee + '円です');
  console.log(change.msg)
}).catch(function(error){
  console.log('エラーが発生しました:' + error.fee);
  console.log(error.msg)
});

これを実行すると

  • node promiss.js
おつりは250円です
OK
おつりは100円です
OK

ちなみにエラーの場合は

おつりは50円です
OK
エラーが発生しました:0
金額が足りません。

こんな感じになります

まず Promiss の一番大事なところは非同期処理のメソッドを作成するときに return new Promise(function(resolve, reject){ を使います
その中で成功した場合は resolve を使い失敗した場合は reject を使うように実装します

あとは呼び出すほうで promiseBuyApple(400).then(function(change){ という感じで呼び出します
change には resolve と reject に与えられた引数の値がセットされます
そして次の非同期メソッドを続けてコールする場合には return で再度非同期メソッドをコールして .then でつなげます

resolve と reject の引数には Json を与えることもできるので then で結果を受け取るときに複数の情報を扱うこともできます

最後に

そもそも JavaScript に関する知識がなかったのでかなり勉強になりました
とりあえず今後は非同期メソッドを作成する場合は Promiss を使っていくようにしようと思います

ただ、気になったのはライブラリとかで実装されたメソッドが Promiss で実装されたメソッドかどうかはどうやって判断するんだろう
自分で実装した場合は明らかにわかるけど、ライブラリとかはソースを見るしかないのだろうか、、、

あとはこれにイベント処理とか絡んできた時にどうやって書くのがベストなのかとか気になります

Java とか C とかをベースに言語を学習してきた人はこの辺の JavaScript の仕組みを理解しないと綺麗にコーディングできないんじゃないかなと思いました

JavaScript はとにかく実行順序を気にしなければいけないのでその辺になれるまでは結構大変かもしれません

0 件のコメント:

コメントを投稿