WebSocket和javascript承诺

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 =

尝试在WebSocket api之上实现承诺包装器。以及对铬的测试

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)