Webワーカーに迷惑をかけていましたが、呼び出されたときにワーカーで作業を実行できるかどうかを判断するクラスを作成しようとしています。これまでのところ、私は次のような機能を期待しています。このウィンドウが存在するかどうかがチェックされると、Webワーカーは例外をスローしています
workerClass.workRequest("Hello");
私の質問は以下に関するなどと呼ば
var workerClass = {
getInstance: function() {
console.log("-- INSTANCE REQUESTED --")
// If we have a worker we have an instance return this.
if (this.worker !== undefined) return this.worker;
console.log("-- INSTANCE NOT CACHED --")
//var
// iAmWorker = window === undefined,
// iCanBeAWorker = iAmWorker ? true : window.Worker !== undefined;
var
iAmWorker = false,
iCanBeAWorker = false;
try{
iAmWorker = window === undefined
iCanBeAWorker = iAmWorker ? true : window.Worker !== undefined;
}
catch(e){
iAmWorker = true;
iCanBeAWorker = true;
}
if (!iAmWorker && iCanBeAWorker){
console.log("-- I AM NOT IN A THREAD - SPAWNING ONE --")
this.worker = {
obj: new Worker("worker.js"),
callFunc: function(funcName, Args){
// MAKE REQUEST
this.obj.postMessage([funcName,Args]);
this.obj.onmessage = function(e) {
console.log('-- MESSAGE RECEIVED FROM WORKER THREAD --');
console.log(e.data);
// COMPLETE DEFFERED OBJ
};
// RETURN DEFFERED OBJ
}
}
console.log("-- I AM IN A THREAD --")
}else{
// Actual Worker object regardless of in a thread or not
this.worker = {
obj: this,
callFunc: function(funcName, Args){
return this.obj[funcName](Args);
}
}
}
return this.worker;
},
// Return a Deferred Object
workRequest: function(content){
return this.getInstance().callFunc("actualWork",[content]);
},
// Actual Work
actualWork: function(content){
console.log("-- SIMULATING SOME WORK --")
var dt = new Date();
while ((new Date()) - dt <= 3000) { /* Do nothing */ }
console.log("-- SIMULATED WORK DONE --");
return content + " world";
}
}
// NOTE ONLY EVER TO BE USED IN A WORKER
onmessage = function(args) {
postMessage(workerClass.getInstance().callFunc(
args.data[0],
args.data[1]
));
}
。私は労働者の中に窓がないことを知っています。したがって、その存在をチェックする私の試み。
var
iAmWorker = window === undefined,
iCanBeAWorker = iAmWorker ? true : window.Worker !== undefined;
これは私がキャッチする必要が例外をスローし、私はこれは醜いと愚か見つけます。このテストを実装するにはより良い方法がありますか?
乾杯と感謝。
@Xufoxそれはウィンドウに例外をスローする===未定義のチェックと子のアクセッサー – Spaceman
[JavaScriptで定義されていない変数をチェックする方法]の可能な複製(http://stackoverflow.com/questions/858181) /どのように - チェック - 未 - 定義されている変数の - JavaScriptで) – Xufox
@Xufoxあなたがリンクした投稿のように未定義のコードをチェックしているのを確認すると、@Xufoxは私のことを思っていません。 – Spaceman