月別2020年08月 一覧
非同期処理も処理内容が増えるにつれてまとめて処理したくなるでしょう。同期処理でやっているようにforEachのように。 普通に上から下に書くだけだと冗長な処理になります。これが何十回と繰り返しになるとうんざりしますね。避けるべきでしょう。これを配列処理でまとめて処理します。 for文の中にawait構文を組み込むだけで配列の非同期処理が可能になります。但し実際実行するとわかるのですがfor文の場合逐次的に配列の中身を処理するので並列処理と比べて遅くなりがちです。(このコードの場合毎回timeOut関数が終わってから次のtimeOut関数に移るので2秒+2秒+2秒の処理時間になる)並列処理で処理
Read more
元々の本職はPhotoshopによる切り抜きだった自分にとって切り抜きの効率化は自動化の原点であります。徹底して切り抜きを効率していった結果切り抜き作業を自動化してExtension化しました。そんなわけでExtension QuickOutの更新をしました。被写体を選択との違いは影を残してくれる所、処理が早い所でECサイト向きでしょうか。内部的には色域処理を利用して対象の色はヒストグラムからとっています。商品周りのゴミなんかも飛ばしてくれて背景と商品の色がはっきりしている画像に関しては下手に人ので切り抜くより早く加工できるでしょう。 概要 スタジオなんかで撮影された商品の背景を自動的に切り抜
Read more
async await の基本は非同期処理を同期処理のように書けるということでした。しかしエラー処理についてまで触れていません。promiseの場合メソッドチェーンにcatchをつなげてエラーをキャッチしていました。async,awaitのエラー処理はいくつかのやり方に別れます。おそらく最もわかりやすいのはtry catchで同期処理のようにキャッチする方法ではないしょうか。 いくつもの非同期処理関数を実行する場合もtry catchで括って一括で管理できます。Promiseがrejectを返した場合はそのままキャッチされるのでわかりやすい。勿論try内でエラーを普通にthrowした場合もキャ
Read more
promiseについて解説しましたがpromiseもthenによるメソッドチェーンを重ねる度に見通しが悪くなってきます。慣れてくるともっと見易くならないかと思うはずです。 メソッドチェーンを何重にも繋いで見づらくなってきました。これを同期処理っぽく書いてみます。 async await async 、await は非同期処理を同期処理のように書く糖衣構文である。同期処理と見た目を変えずに書けるためコードの見た目がすっきりします。ちなみに先ほどのコードをasync awaitで書き直すとこんな感じに。 メソッドチェーンが無くなってすっきりしました。async awaitは基本非同期処理を関数で囲
Read more
非同期処理のコードを見易くしてくれるpromiseは単体処理だけでなく配列処理をしてくれるpromise.allやpromise.race等があります。慣れないとややこしいですが特に非同期関数をまとめて処理できるallは便利なので使えるようにしたい所です。 Promise.all(promiseオブべジェクトの配列) promise allはpromiseオブジェクトを返す関数をarray形式で受け取り並列処理して結果をarray形式で返します。 見た目がすっきりするだけでなく並列処理で同時に処理を始めて全ての処理が終わってから結果を返します。なので普通にpromiseを続けて処理させるより早
Read more
jsでぶつかる壁の一つ非同期処理。Adobe Extensionだと基本jsxとの通信くらいしか使用しないですがNode moduleを色々使用したり外部との通信をやったりしていくうちにExtension開発者も徐々にぶつかる壁です。同期処理は上から下にコードを書いていけば上から下に処理を実行しますが非同期処理は処理が実行されてから終了するまで他の処理と同期しないので上から下に順番に処理を実行してくれません。誰もが最初に驚く壁だと思います。そして面倒くさいと感じるでしょう。しかし今日この非同期処理はjsと切っても切れない関係になっていてwebsiteを作る時もクライアントサイドでもがんがん使わ
Read more
よく使うファイル操作のメソッド一覧の続きです。 readdirSync(ファイルパス,オプション) フォルダー内のファイルを配列形式で取得します。ver10からオプションに{withFileTypes:true}を渡すとファイルの情報も取得できるようになりました。(Adobe cepはver8) 各ファイルはisDirectoryメソッドでフォルダーかどうかを簡単に識別できるので再帰的にフォルダーを遡る方法が簡単になりました。 ファイルを再起的に取得。 指定したパスからフォルダー名のみ取得。 readFileSync(ファイルパス、オプション) readFileSyncはファイルの中身を読み込
Read more
今回はよく使うファイル操作のメソッド一覧です。 fs.renameSync(オリジナルパス、リネーム後のパス) fs.renameはリネームと名前がついていますがファイル移動もこのメソッドを使います。第一引数に元々のファイルパス、第二引数でリネーム後(移動後)のパス。リネーム後と同一のファイルがすでに存在する場合リネーム後のファイルで上書きしてしまうので注意。但し同じフォルダーがあった場合はエラーを返します。 fs.mkdirSync(フォルダーパス,オプション) fs.mkdirSyncはからのフォルダーを作成します。作成するフォルダーパスを引数に渡してください。階層の深いフォルダーを一度に
Read more
実際Nodeでフォルダーのファイルを一覧として取得してみます。Adobe CEPの環境でも動きます。ファイル関係のモジュールはfsになりますがfsやpathモジュールはデフォルトで使用できるモジュールなのでnpmでインストールやらなんやらする必要はありません。 コードの頭でモジュールを呼びだすのが良いみたいです。 実際に特定のフォルダーの中に入っているファイルを一覧として取得してみましょう。 今回デスクトップに設置したcopyFolderという名前のフォルダーからフォルダーの中身の一覧を取得します。実際copyFolderという名前のフォルダーをデスクトップに作成して中になんでもいいのでファイ
Read more
今までも何度かファイルシステム関連の記事やNode js関連の記事に触れましたが改めてファイルシステムを扱う手段としてNode jsに触れてみます。Node jsは元々サーバーサイドスクリプトなのでブラウザ上で動くスクリプトと違って直接ローカル上のファイルを動かしたり書き込んだりすることが可能なのでファイルシステムを作ることが可能です。反対にブラウザ上で動くクライアントサイド側のスクリプトはセキュリティ上ローカルのファイルを直接いじれないようになっています。ウェブサイトを回覧していて突然スクリプトがユーザーのローカルのファイルを書き込んだりすると危険でしょう。ちなみにAdobeのjsxはまたク
Read more