我想为web工作者编写一个简单的包装类。当其中一个定义的消息发送给webworker时,LayoutBridge会分配一个票据,该票据在处理请求时返回。这样,我应该可以为这些请求运行回调。this._waiting is undefined
我收到以下错误
TypeError: this._waiting is undefined
在_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/
谢谢,摆脱了错误的。你有调查网络工作者的一般建议吗? (我知道这个特定的错误不会被我所能做的很多)也许你有一些普遍的智慧... – lowerkey 2013-04-06 10:35:13
铬提供了一个很好的调试工具。只需输入'debugger;'在你得到错误的代码中。在运行你的代码时,保持chrome控制台打开(按F12)。而且你的代码将停在那里,你可以很容易地找出一步一步出错的地方。 – 2013-04-06 10:40:09
好吧,它摆脱了错误,但回调仍然没有被调用。我使用了'var oThis = this; this._worker.onmessage = function(e){oThis._recvMsg(e); };' – lowerkey 2013-04-06 10:40:44