最近、個人で開発しているアプリで Node.js
を触ることが多いのですが、Javascript で非同期処理を扱う際の知識が不足しているので、この記事をきっかけに少しずつ勉強していこうかと思います👷♀️
ということでまずはタイトルの通り Promise
について調べていくっ
Promise
って?
Promise
は、Javascript における非同期処理の結果を表すオブジェクトです。呼び出し側はこの Promise
を使用することで非同期処理をより完結に記述することができます(つまりコールバック地獄にならない)。Swift 標準では Promise
のようなものは用意されていませんが、RxSwift
における Observable
だったり、SwiftTask
における Task
だったりが役割的には近い感じだと思います。
ちなみに、Swift の Async/Await
に関する Proposal もあるみたいなので、もしかしたら Swift6
から標準で Promise
ライクに非同期処理を書ける時がくるかもしれませんね👀
Concrete proposal for async semantics in Swift · GitHub
Promise
の基本
Promise
には下記の3つ状態があり、そのうちの下二つ(fulfilled
・rejected
)を引数にとります。
pending
fulfilled
rejected
第一引数には成功時のコールバックを、第二引数には失敗時のコールバックをそれぞれ記述します。
new Promise(function(resolve, reject) { resolve('success'); }); new Promise(function(resolve, reject) { reject('failure'); });
呼び出し側ではそれぞれの通知を下記のように受け取ることができます。
function test() { promise_sample() .then((data) => { console.log(data); }, (error) => { console.log(error); } ); }
失敗時のコールバックは catch
で受け取ることもできます。
function test() { promise_sample() .then((data) => { console.log(data); }) .catch((error) => { console.log(error); }); }
また、失敗時の処理の後に then
をつけることで、成功時と失敗時の処理の後に処理を書くことができるようです。RxSwift
における onCompleted()
みたいな感じですね🧑🔧
function test() { promise_sample() .then((data) => { console.log(data); }) .catch((error) => { console.log(error); }) .then(() => { console.log('Finish'); }); }
という感じで本日は以上になります。また、わからないことが出てきたら Javascript
関連で記事を書こうかと思います✍️
参考
- https://techplay.jp/column/581
- https://qiita.com/koher/items/29357b5e00aec1962601
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise