如何用promise 模拟服务器下发消息的情况

现在用callback形式解决如下

class Connect {
    onmessage(cb) {
        setInterval(() => {
            cb(666)
        }, 1000)
    }
}
class Client {
    constructor(connectClient) {
        connectClient.onmessage(function(message) {
            console.log(message)
            //这里能不断拿到message 信息 666
        });
    }
}
let connectClient = new Connect();
let client = new Client(connectClient);
        

求教各位大佬如何使用 promise 实现如上效果啊

class Connect {
    onmessage() {
        return new Promise((resolve, reject) => {
            setInterval(() => {
                resolve(666)
            }, 1000)
        })
    }
}
class Client {
    constructor(connectClient) {
        let message = connectClient.onmessage();
        //这里只能拿到一次message 666
        console.log(message)
    }
}
let connectClient = new Connect();
let client = new Client(connectClient);
阅读 1.9k
2 个回答
class Connect {
    onmessage() {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(666)
            }, 1000)
        })
    }
}
class Client {
    constructor(connectClient) {
        (async function() {
            for (;;) {
                let message = await connectClient.onmessage();
                //这里只能拿到一次message 666
                console.log(message)
            }
        })()
    }
}
let connectClient = new Connect();
let client = new Client(connectClient);

你这一开始就想错了,promise一旦决议后是不能再改变的,定时器不断resolve这个想法本身就是错误的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题