Edited at

AngularJS(JavaScript)の非同期処理うざすぎ問題

今月から新規案件としてAngularJSを使っている開発案件に参画しました。

そこで個人的になんやねんこの仕様…と思ったポイントを適当にメモって今後に活かせればみたいなやつです。

※筆者はJavaScriptの知識ほぼなしです。(なんで参画できたか謎です。)


非同期処理がうざい

JavaScriptの仕様として非同期処理ってのがあるみたいです。

うまいことPromiseとか使えば回避できそうなのですが既にできてるシステムの保守開発なのでそこまで大改造もできず困ってます。


ポップアップブロックされるやつ

Chromeのポップアップブロックはオフにしているのにブロックされちゃう、って話です。

どうもclickイベントで発火した処理に非同期処理が入るとブロックされるみたいです。


hoge.js

$scope.hogeButton = function() {

$scope.getNanka.then(function(arg) {
window.open("http://hogehoge.com/" + arg)
});
}

$scope.getNanka = function() {
//RESTでサーバーからデータ取ってくる
return result;
}


こんな感じの処理書いておくとブロックされます。ChromeさんはクリックイベントはhogeButtonやろ!?ってなってブロックしちゃうみたいです。賢い。

めんどくせーと思いながら調べたところ一応の回避策としてボタンを置いた画面を開いた時点リクエストを投げてURLを作っておけばいいみたいです。一覧系の画面なのであんまり現実的ではないです。

なんやかんやあってこの対応はお蔵入りになりました。ポップアップ許可すれば一応開けるし。。。


とりあえず

画面の挙動うまくいかんな~と思ったら非同期処理でうまいこといってないことが多かったです。

思った通りに動いてくれるJavaさんすき。ハムとハム太郎くらい違うって話は本当だったんですね。

今後もなんか気になったことあれば書いていきます。