2010-12-14 17 views
3

は、Windowsスクリプトホスト(JScriptの)環境での簡単な関数を持っている想像:WindowsスクリプトホストでJavaScript関数の非同期呼び出しが可能ですか?

function say(text) { 
    WScript.Sleep(5000); 
    WScript.Echo(text); 
} 

は非同期say()を呼び出すことが可能ですか?

注:setInterval()またはsetTimeoutなどのブラウザベースの方法は、WSHでは使用できません。

+1

密接に関連:http://stackoverflow.com/questions/2198449/settimeout-not-working-in -windows-script-jscript/2655180#2655180しかし、検索している人は、それを見つけるつもりはない、彼らはこれを見つけるでしょう。 –

答えて

2

いいえ、Windowsスクリプトホストは、スクリプト関数を非同期に呼び出すことをサポートしていません。あなたは、この効果を達成するために、同時に2つのスクリプトを実行する必要があります:

// [main.js] 
var oShell = new ActiveXObject("WScript.Shell"); 
oShell.Run(WScript.FullName + " say.js Hello"); 

WScript.Echo("Hello from main"); 

 

// [say.js] 
WScript.Sleep(5000); 
WScript.Echo(WScript.Arguments.Item(0)); 
1

私の知る限り、Windows Script Hostの下ではsetTimeout/setIntervalに相当するものはありません(驚くほど)。ただし、this simple function queue in another answer here on SOは、エミュレートするのに便利な出発点です。基本的には、その人がしたこと(彼の名前も「TJ」ですが、私ではありません)は関数のキューを作成し、メインループをメインメソッドと呼びます。メインループは、ブラウザベースの実装でハートビートをエミュレートします。私はちょっとした命名を変更するつもりですが、かなり巧妙です。

+0

残念ながら、これは私が必要とするものではありません。問題は 'say()'メソッドで重い計算が行われるため、実際の並列処理(スレッドエミュレーション)が必要であるということです。 –

+2

@Savva:ええ、あなたはWSH + JScriptで純粋にそれを取得するつもりはありません(そして、あなたはブラウザ+ JavaScriptのどちらでもないでしょう、 'setTimeout'は並列処理を設定しません、遅延実行のみ)。 'WshScriptExec' [http://msdn.microsoft.com/en-us/library/2f38xsxe(v=VS.85).aspx]を使って複数のスクリプトを起動することができます。複数のスクリプトは、' StdIn'と 'StdOut '。 –

関連する問題