jQueryのdeferredで処理をthenで直列に繋げた時にうまく待機してくれなかった話
2015年08月25日 01時19分
久々にJavaScriptのソースとにらめっこする機会があった。
そこで気になったのが非同期処理の連結方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
function func1() { var flag = getAsyncFuncStatus(); swtich (flag) { case 1: // 未完了時はリトライ setTimeout("func1()", 1000); break; case 2: // 完了時の処理 // ここで非同期処理が終わった処理を記述 doSomething(); // 次の非同期処理へ func2(); break; } } funciton func2() { var flag = getAsyncFuncStatus(); swtich (flag) { case 1: // 未完了時はリトライ setTimeout("func2()", 1000); break; case 2: // 完了時の処理 // ここで非同期処理が終わった処理を記述 doSomething(); // 次の非同期処理へ func3(); break; } } // func3も似たようなコードで記述 func1(); |
こんな感じで非同期処理が書かれていた。
非同期処理の完了部分に次の非同期処理の呼び出しが記述されていて見通しが悪く、
なんとかしたかったので検索してみたら速攻でdeferred, Promise辺りの単語にあたった。
既にjQueryを使っていたのでjQueryのdeferredを使ってみることにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
function func1() { var dfd = $.Deferred(), proc = function() { var flag = getAsyncFuncStatus(); switch (flag) { case 1: setTimeout("proc()", 1000); break; case 2: // ここで非同期処理が終わった処理を記述 doSomething(); dfd.resolve(); break; } }; proc(); return dfd.promise(); } function func2() { var dfd = $.Deferred(), proc = function() { var flag = getAsyncFuncStatus(); switch (flag) { case 1: setTimeout("proc()", 1000); break; case 2: // ここで非同期処理が終わった処理を記述 doSomething(); dfd.resolve(); break; } }; proc(); return dfd.promise(); } // func3も似たようなコードで記述 func1() .then(func2()) .then(func3()); |
非同期処理の連結が外に出せて非常にスッキリした。
func1とfunc2の順番が逆になっても変更箇所は最後の呼び出し部分だけで済むし良い感じ。
とか思って実行してみたらfunc1の完了を待たずにfunc2とfunc3が実行されてしまう。
すっごい悩んで調べまくったらjQueryのバージョンが1.7でthenの挙動が1.8以上と違ったのが原因だった。
徒労感が半端ない理由で余計疲れた。
jQuery.Deferredを使うんだったら最低でも1.8以上にしないとネット上によく書かれているthenによる非同期処理の直列繋ぎはできないので要注意。
Laravel Meetup Tokyo Vol.6 に参加してLTしてきた
2015年06月15日 20時43分
Laravel Meetup Tokyo Vol.6に参戦してきました。
https://laravel.doorkeeper.jp/events/24619
この勉強会がある週から1年半ぶりぐらいに5.0を触っていました。
そんな中、5.1が週半ばぐらいにリリースされたのでそれについてボソッとTweetしたら1日前に主催者の@mukakenさんからまさかのメッセージがきました。
なかなかLTの集まりが悪いような感じは受けていたのですが、まさかのお願いがくるとは、、、
5.x系はあまり触っていないのに発表してもいいものかと思いましたが、声を掛けていただいた@mukakenさんにはFuelPHP勉強会やPHPカンファレンスなどでお世話になっている(と勝手に思ってる)ので人生初のLTに挑んできました。
その時のスライド
http://crossl.net/slides/laravel_meetup612/#/
5.0から5.1へアップデートする場合とプロジェクトから作り直す場合の主な違いについてのまとめです。
めっちゃ緊張してうまく喋れませんでしたがTwitterで反応してもらえたり会社の人も喜んでくれたのでまぁ良しとします。
ただ残念なことにヘタレな僕は緊張しすぎて他の人の発表をあまり聞けませんでした。
これはとても残念。
その中でも記憶にある@ytakaさんの発表で「illuminate/htmlはもうメンテされていないのでlaravelcollectiveの方を使いましょう」というのは自分もilluminate/htmlを使っていたので助かりました。
http://laravelcollective.com/
もちっとうまく発表できるように場数踏んでいきたいなぁ。
第3回かわいいKotlin勉強会に参加してきた
2015年06月07日 11時19分
第3回 かわいいKotlin勉強会に参加してきました。
ロゴもかわいい。
https://kotlin.doorkeeper.jp/events/23515
もう5年ぐらい業務でJavaすら触っていないLL or .Netな人なんですけどネット上では盛り上がっているような気がしていたので情報を仕入れるために参戦。
一番期待していたサーバサイドとか、AltJSとしては厳しいけどandroidとしてはswift的な立ち位置を確保できるようなポテンシャルを感じました。
あとはオープンソースとはいえ良くも悪くもJetBrainsの動向次第って感じ。
イカ、要約
Kotlinらしいコード / @ngsw_taroさん
Javaを触ってからKotlinに移るとJavaっぽいKotlinコードになりがち。
Kotlinらしいコードにしたらコード量がだいぶ減ってた。
スライド
https://speakerdeck.com/ntaro/kotlinrasiikodo-number-jkug
サーバーサイドKotlinの現状とその検証 / @yy_yankさん
まだ早い、、、というかこの分野はいつまで経っても使える時はこなさそうな感じだった。
紹介されたWeb Framework
個人開発AndroidアプリをKotlinにガチ移行してみた話 / @kiriminさん
Kotlinのandroid用プラグインがJetBrainsから出ている。
それを使うとfindViewByIdを葬りされる。
Kotlinでandroidをやる辛さはない。
個人開発や新規案件の出し切りアプリなら選択肢として有りなのでは?
受託や継続案件だと実績がないというリスクがあることを考慮すること。
スライド
https://speakerdeck.com/kirimin/ge-ren-kai-fa-androidapuriwokotlinnigatiyi-xing-sitemitahua
TypeScriptとKotlinの話 / @mike_neckさん
AltJSとしてのKotlinの話になってたと思う。
コンパイル後に生成されるコードをnativeアノテーションでラップしてく作業、苦行そのものっぽかった。
型のティーカップを膝の上に置いてバランスを取る方法 / @ayato_pさん
ClojureからKotlinを呼び出すコードの紹介。
あなたと! Clojure!
普段C#使っている僕から見た、Kotlin / @RyotaMurohoshiさん
C#erがJVMでなにか作る必要になったらXamarinと言わず、C#6.0っぽい機能がいっぱいあるよとKotlinをお勧めするべき!
プレゼンがどこぞの先生並に上手だった。
江戸前セキュリティ勉強会(201505)に参加してきた
2015年05月30日 23時31分
江戸前セキュリティ勉強会(201505)に初参戦してきました。
https://sites.google.com/site/edomaesec/workshop/edomaesec201505
徳丸さん目当てだったのですがファミコンエミュレータの話とか保険の話とか幅広い分野の発表が多くて楽しかったです。
勉強会の雰囲気も進行役のまっちゃだいふくさんのトークが面白いからか会場全体の雰囲気が良かったです。
そう感じたのは最初の自己紹介タイムで周囲の人と話し合ったってのも大きかったような気がする。
自己紹介の方法がみんなに向かって話すんじゃなくて奇数列の人が後ろ向いて偶数列の人と自己紹介し合うという方法でした。
やっぱ一声掛け合って隣に座っている人が何者なのか知っているとちょっとしたことの感じ方がだいぶ違ってきますわな。
あと、おやつタイムに出てたおやつ、とても美味しかったです!
以下、要点まとめ
SQLインジェクション対策もれの責任を開発会社に問う判決 / 徳丸さん
SQLインジェクション対策もれの責任を開発会社に問う判決
http://blog.tokumaru.org/2015/01/sql.html
「重過失を認めると著しく均衡を欠くので重過失の際は損害賠償責任制限は適用されない」
重過失と認められた場合は、契約書で損害賠償金の上限を定めていても請負金額を突き抜けて請求されることがあるということ。
こうなると重過失とはどう判断されるのか。
それは要件定義に記載がなくても暗黙的に実装されるであろう期待されている 専門家としての責務 がどこまでか、ということ。
一定の基準として参考になるのは経産省やIPAが公開している脆弱性。
これらは確実に潰しておく必要がある。
IPA 独立行政法人 情報処理推進機構:情報セキュリティ
http://www.ipa.go.jp/security/
ファミコンエミュレータの開発話 / 河口さん
某専門学校生時にアセンブラでゲーム作ったのを思い出した。懐かしい。
けどなぜこの勉強会でこの内容なんだw
サイバー保険を分析してみた / 相戸さん
色々と公開規制w めちゃ面白かったです。
LT
## React.js に XSS 対策を求めるのは間違っているだろうか / くらりどさん
スライド
http://www.slideshare.net/katoryo399/reactjs-xss-48686124
## Dom based XSSの話 / kyo_agoさん
htmlのレンダリングがサーバサイドからクライアントサイドになってきたけど
Virtual DOM だとDOM Based XSSがおきない!
おまけ話でExtensibleWebというのを紹介。
ブラウザで低レイヤーAPIの実現(生Socketとかある)。怖い。
でも早めに公開してバグハンターに脆弱性を見つけてもらおうという流れができている。
## Android APK解析の話 / すいません、発表された方わかりませんでした
android解析用の環境セット AppUseがとても便利。
https://appsec-labs.com/appuse/
## かよちゃんを救う会の紹介
勉強会会場を提供していただいた株式会社ラックの社員さんのお子さんが心臓病を抱えているそうです。その移植手術の支援をしている活動紹介。
http://kayo-chan.com/
会場を提供していただいて勉強会を開催していただいた株式会社ラックさん、運営の方々、発表していただいた方々、ほんとうにありがとうございました。
IntelliJ IDEA(mac)で全角入力に切り替えたら文字が消える現象
2015年04月22日 02時25分
IntelliJ IDEAを14.0から14.1にバージョンアップしてから下のような現象に悩まされていました。
半角入力から全角入力に切り替えるとキャレットの1文字前の文字が上書きされて結果消えてしまうという症状です。
で拙い英語で申し訳ないと思いながらも問い合わせたらYouTrackにチケット作ってくれて、中の人が対応策を教えてくれました。
https://youtrack.jetbrains.com/issue/IDEA-138964
As a workaround, please try disabling the option ide.mac.pressAndHold.workaround in Registry (Help->Find Action-> search for “registry”).
下のチェックを外すと症状は改善されました!
この症状に本当に悩まされていたので回避方法があって本当に良かった。