WebSocket和javascript承诺
尝试在WebSocket api之上实现承诺包装器。以及对铬的测试WebSocket和javascript承诺,javascript,websocket,promise,Javascript,Websocket,Promise,尝试在WebSocket api之上实现承诺包装器。以及对铬的测试 function WSConnection() { 'use strict'; this.socket = {}; } WSConnection.prototype.connect = function (url) { 'use strict'; return new Promise(function (resolve, reject) { var this.socket =
function WSConnection() {
'use strict';
this.socket = {};
}
WSConnection.prototype.connect = function (url) {
'use strict';
return new Promise(function (resolve, reject) {
var this.socket = new WebSocket(url);
this.socket.onopen = function () {
socket.send('hello from the client');
resolve();
};
this.socket.onmessage = function (message) {
console.log("Received on websocket: " + message);
};
socket.onerror = function (error) {
console.log('WebSocket error: ' + error);
reject(error);
};
socket.onclose = function (event) {
console.log("Websocket socket closed: " + JSON.stringify(event));
};
});
};
WSConnection.prototype.disconnect = function () {
'use strict';
console.log("Disconnect request from local app layer");
this.socket.close();
};
然而,当我运行这个程序时,我在
var this.socket = new WebSocket(url);
带着错误
“拒绝承诺时暂停。TyperError:无法设置属性'socket'
“未定义的”
。在控制台上,我看到以下错误-
未捕获(承诺中)TypeError:无法设置的属性“套接字”
未定义”
这里怎么了?“
this.socket
”是否引用对象中的“socket”变量?如果是,如何访问WSConnection对象中的“socket”变量。是否有更好的方法在浏览器上显示websocket API?错误行的语法不正确
this.socket=新的WebSocket(url)代码>
它应该是this.socket=newWebSocket(url)代码>我想
同样在newpromise
回调中,这将是未定义的,因为它是匿名回调
您可以将此绑定到回调函数或ES2015箭头函数(更多详细信息)
箭头函数示例:
function WSConnection() {
'use strict';
this.socket = {};
}
WSConnection.prototype.connect = function (url) {
'use strict';
return new Promise((resolve, reject) => {
this.socket = new WebSocket(url);
this.socket.onopen = function () {
socket.send('hello from the client');
resolve();
};
this.socket.onmessage = function (message) {
console.log("Received on websocket: " + message);
};
socket.onerror = function (error) {
console.log('WebSocket error: ' + error);
reject(error);
};
socket.onclose = function (event) {
console.log("Websocket socket closed: " + JSON.stringify(event));
};
});
};
WSConnection.prototype.disconnect = function () {
'use strict';
console.log("Disconnect request from local app layer");
this.socket.close();
};
这个
在promise解析器回调中没有定义。我从上面提供的信息中得到了有用的信息。不知道如何接受。当你的问题结束时,你不需要接受任何东西。你应该在那里投票选出有用的答案。你可能还对-一个用于WebSocket的基于承诺的现成API感兴趣。谢谢你指出这个问题。但是,到目前为止,只有firefox才支持箭头函数guess@sthustfo您可以使用transpiler将其转换为ES5(如babel)