Web ワーカー用の単純なラッパー クラスを作成しようとしています。定義されたメッセージの 1 つが webworker に送信されると、LayoutBridge はチケットを割り当てます。これは、リクエストが処理されたときに返されます。このようにして、これらのリクエストに対してコールバックを実行できるはずです。
次のエラーが表示されます
TypeError: this._waiting は未定義です
_recvMsg で。
ここにコードがあります。私はこの自作のなぞなぞを数日間解決しようとしていますが、LayoutBridge コンストラクターと (念のため) 両方で待機が定義されているため、何が間違っているのかわかりません。 init 関数で。
この直後にjsfiddleを投稿しますが、誰かがすでに答えを知っているかもしれません。
var LayoutBridge = function(){
this._waiting = {};
this._initialized = false;
};
LayoutBridge.prototype.init = function(opts){
if(!this._initialized){
this._waiting = {};
this._worker = new Worker('/layout-worker.js');
this._worker.onmessage = this._recvMsg;
var ticket = _.uniqueId();
var waitingCallback = function(){
this._initiated = true;
};
waitingCallback.bind(this);
this._waiting[ticket] = waitingCallback;
this._worker.postMessage({cmd: 'init', ticket: ticket});
this._initialized = true;
}
};
LayoutBridge.prototype.addVertex = function(callback){
if(!this._initialized) throw "Initialize LayoutBridge first";
var ticket = _.uniqueId();
this._waiting[ticket] = callback;
this._worker.postMessage({cmd: 'addVertex', ticket: ticket});
};
LayoutBridge.prototype.removeVertex = function(id, callback){
if(!this._initialized) throw "Initialize LayoutBridge first";
var ticket = _.uniqueId();
this._waiting[ticket] = callback;
this._worker.postMessage({cmd: 'removeVertex', id: id, ticket: ticket});
};
LayoutBridge.prototype.addEdge = function(sourceId, targetId, callback){
if(!this._initialized) throw "Initialize LayoutBridge first";
var ticket = _.uniqueId();
this._waiting[ticket] = callback;
this._worker.postMessage({cmd: 'addEdge', sourceId: sourceId, targetId: targetId});
};
LayoutBridge.prototype._recvMsg = function(e){
this._waiting[e.data.ticket](e.data.payload);
//delete this._waiting[e.data.ticket];
};
編集、ここにフィドルがあります: 提案が含まれています: http://jsfiddle.net/MGSvj/2/