rmc_website/_site/dsishop/NCL/ec/syncEc.js

59 lines
1.4 KiB
JavaScript

/*
syncEc.js
非同期処理の EC 関数を同期処理にしたりするラッパー
*/
/*
指定ミリ秒間ブロッキングして待つ関数
よい子はあまり真似しないように
*/
function wait_( time )
{
var start = new Date();
var now;
do
{
now = new Date();
} while ( now.getTime() - start.getTime() <= time );
}
/*
非同期処理の EC を無理やり同期処理にする関数
ec_func は eval で実行するので文字列として渡してください
基本的に getProgress に対してしか使わないはずですが…
例:
var progress = SyncEc( "ec.getProgress()" );
*/
function SyncEc( ec_func )
{
var progress;
if ( ec_func == null || ec_func == undefined )
return ( progress );
progress = eval( ec_func );
while ( progress.status == EC_ERROR_NOT_DONE )
{
wait_( 100 );
progress = eval( ec_func );
}
return ( progress );
}
/*
非同期処理の EC を指定したコールバック関数で通知する関数
現在実装中
*/
function AsynEc( func, callback, interval )
{
if ( interval < 0 )
interval = 1;
var progress = eval( ec_func );
if ( progress.status == EC_ERROR_NOT_DONE )
{
setTimeout('AsynEc("' + func + '","' + callback + '","' + interval + '")', interval );
}
else
{
eval( callback + "( progress )" );
}
}