ホスティング業者の見極め方

【セマフォ】に関する知恵袋

【質問】
setIntervalで処理順序を指定するようなスクリプトを書いてみたのですがはじめまして。お世話になります。JavaScript初心者です。いろいろ勘違いしているかもしれませんが、ご容赦下さい。自分はCばかり使っているので、セマフォの知恵袋の詳細をお伝えすると、「プログラムは上から下へ1行ずつ処理される」という考えが染みついており、「呼び出した関数の処理が終わっていないのに次の行が動作する」という仕様に手間取っていいます。【やりたいこと】1. データを取得する関数 getData()2. データを処理する関数 handData()3. データを表示する関数 dispData()の3関数を、それぞれの関数の処理が終了してから次の関数に移るというかたちで実行したい。データ取得に時間がかかるらしく、ホスティングの業者の見極が教えてくることは、順番に書くだけだとgetData()が終わらないうちにhandData(), dispData()が実行されてしまいます。ホスティングの業者の見極を言及していくと、【自分なりに考えた解決策】setIntervalを用いて処理順序を指定してみました。これで動作はしています。具体的には、処理段階を記述する変数stepを用意し、その値をsetIntervalのリピートで監視するような、セマフォ的なイメージです。(まずmainFuncが走ります)var step = 1;function mainFunc(){ var timerId = setInterval(function(){ switch(step){ // 処理の段階記述 step==0 で何もしない case 1: step = 0; getData(); break; case 2: step = 0; handData(); break; case 3: step = 0; dispData(); break; case 4: clearInterval(timerId); timerId = null; return 0; } }, 100);}function getData(){ // データを取得 step = 2;}function handData(){ // データを処理 step = 3;}function dispData(){ // データを表示 step = 4;}【質問】これでどうやら期待通りの動作をしてくれるようなのですが、セマフォの知恵袋について言えることは、インターネットを調べてもこういうスクリプトを書いた例があまりなく、もしかしたら重大な欠点があるのではと不安になっています。ざっと見て問題になりそうな点や、「こうしたほうがいい」という点などありましたらご回答お願いします。※タブやスペースが効かないようなので、見にくいかと思いますがよろしくお願いします。
【解答】
JavaScriptも上から下に、順番に実行されます。イベントドリブンや通信、マルチスレッドなど、セマフォの知恵袋に対しては、特殊な処理方法(順番)もありますが、考え方はCのそれらと同じです。セマフォの知恵袋については、ホスティングの業者の見極を見ると、普通に考えればfunction mainFunc(){getData();handData();dispData();}これで良いはずです。(補足によると、この書き方では無理そうですが)-------------質問文中のコードについてですが、アルゴリズムは悪くないと思いますが、机上デバッグにて、case 1を実行-> getDataの処理が終わらないままタイマーが関数を呼び出し-> case 1を再度実行というバグが潜んでいそうです。------------getDataなどの関数を書き換えられるのであれば、順番に呼び出すのが簡単だと思います。function getDataのコールバック関数(){//処理 handData(); //を呼び出す}function handDataのコールバック関数(){ //処理 dispData(); //を呼び出す}function dispData(){ //処理}なお、ホスティングの業者の見極というと、JSONPは非同期通信です。
Webサービス by Yahoo! JAPAN