【发布时间】:2016-03-09 09:19:11
【问题描述】:
尝试在 WebSocket api 之上实现一个 Promise 包装器。并在 chrome 上进行测试。
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:无法设置属性'socket' 未定义”。
这里有什么问题? “this.socket”是指 Promise 对象中的 'socket' 变量吗?如果是这样,我如何访问 WSConnection 对象中的“套接字”变量。有没有更好的方法在浏览器上承诺 websocket api?
【问题讨论】:
-
好吧,
this在 Promise 解析器回调中未定义。 -
我从上面提供的duplicate link 获得了有用的信息。不知道如何接受。
-
当您的问题结束时,您无需接受任何内容。您应该在那里为有用的答案投票。
-
您可能还对websocket-as-promised 感兴趣 - 一个现成的基于 Promise 的 Websocket API。
标签: javascript websocket promise