WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:JavaScriptで処理を一定時間待つ方法

0:[投稿] 乱 [2003/02/05 00:35 ][環境:特に意識していません 特に意識していません]

乱といいます。

JavaScript で処理を一定時間待つ方法
(Sleep関数のような処理)ってどうやれば
いいのでしょうか?

私が具体的にやりたいことを書くと以下のようなコードです

function aaa(){
 document.form.result.valute=""
 xxxx; //フォームのtextに文字を入れる処理を
    //別プロセスで実行
 bbb();//フォームのtext に文字が入るまで待つコード(関数)
 if(document.form.result.valute="1")  
  return true;
 else
   return false;
}

function bbb(){
 if(document.form.result.valute=="") {
    sleep(100);  //このコードは嘘です。
    bbb();
 }
}

<BODY>
  var i;
  i = aaa();
  <form name="form">
    <input type="text" name="result">
  </form>
</BODY>

別プロセスからの処理に最大で数秒かかるため、
再起呼び出しで処理を待ちたいと考えております。
最初 setTimeout("bbb()",100)とか考えたんですが、
setTimeout ってセットするだけで実際は
次の行に進んじゃうんですね
よってフォームのtext に文字が入ってないにもかかわらず
bbb()から戻ってきてしまいます。
<実際コード書いて試してわかりました。

…上のsleep部分はなにかよいコードはないでしょうか?
sleep なしで再起呼び出しを呼ぶしかないのでしょうか?
<数秒って相当の回数再起呼び出しを行いますよね?
 メモリとかに負荷かけませんか?

もっと他のいい方法で全体的な
コードがかけるという提案がありましたら
それでもとても嬉しいです。
いろいろ試しましたが、八方ふさがりの状態です。

回答よろしくお願いします。


1:[回答] Iwa [URL] [2003/02/05 01:41 ]

setTimeout("bbb()",100)
だと0.1秒後に関数bbbを呼ぶということになるので100秒待たせたいのなら100を100000としないとダメです。


2:[回答] 123 [2003/02/05 02:07 ]

settimeoutはあくまでタイマーなので、セットした時間の後に指定の
関数を呼び出すだけです。

なので、フラグセットして自分自身の関数を指定しその後無限ループ
すればjavascript的には、その間何もしない状態になります。
でもHTMLのコントロールがその間にどうなるかはしりません。


function sleep(sleep_out){
if(flg){ return;}
settimeout("sleep()", sleep_out*1000);
flg=1;
limit = 100000000;
for(i=1; i<limit; $i++){/* 何もしないループ */;}
}

sleep(3);

試してませんが、こんな感じ?

でも、こんな事をするより待ち時間を作る必要があるアルゴリズムを
何とかした方が良いような・・・


3:[回答] 謎の人R [2003/02/05 07:47 ]

>JavaScript で処理を一定時間待つ方法
>(Sleep関数のような処理)ってどうやれば
>いいのでしょうか?

こういうのはいかが?

function Sleep( T ){
   var d1 = new Date().getTime();
   var d2 = new Date().getTime();
   while( d2 < d1+1000*T ){    //T秒待つ
       d2=new Date().getTime();
   }
   return;
}
Sleep( 1 );//1秒待つ

※以下のページを参考
http://www.parkcity.ne.jp/~chaichan/qanda/qa3037.htm


4:[回答] gun [2003/02/05 09:18 ]

function aaa(){
    document.form.result.value=""
    xxxx; //フォームのtextに文字を入れる処理
    bbb();
}
function bbb(){
    if(document.form.result.value=="1")
        return true;
    else if(document.form.result.value=="0")
        return false;
    else
        setTimeout("bbb()",100);
}


5:[完了] 乱 [2003/02/06 00:26 ]

回答ありがとうございました。
やはり無意味なループを繰り返すしかないんですね。
JavaScriptはローカル側で動きますので
ローカルマシンに負荷をかけさせたくないのが
正直なところではありますね。

…数秒ループする程度ではそれ程負荷ってかからない
物なのでしょうか…

参考にさせていただきます。
ありがとうございました


6:[完了] [2003/02/06 00:53 ]

いまどき、何もしないループをそんくらいまわした程度で、どうにかなりますか?


7:[回答] アル [2003/02/11 14:25 ]

無理にLOOPで待たせるよりも、最初のほうで書き込まれていたタイマー処理のほうが個人的にいい気がします。
LOOPでユーザの処理をロックしてしまうと、マシンが落ちているように感じてしまうからです。
タイマー処理で待たせておき、フラグ制御で他の動作を規制させたほうがいいと思いますよ。
でもF5(更新)とか押されたらどーなんだろ?

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World