Angular CanActivate:具有套接字侦听器的可观察布尔值

Angular CanActivate:具有套接字侦听器的可观察布尔值,angular,canactivate,angular-route-guards,Angular,Canactivate,Angular Route Guards,我正试图像这样从服务器的套接字中获取一个属性 isVerified() { this.socket.emit('verify'); return new Observable<boolean>(observer => { this.socket.on('isVerified', data => { observer.next(data) observer.complete()

我正试图像这样从服务器的套接字中获取一个属性

isVerified() {
    this.socket.emit('verify');

    return new Observable<boolean>(observer => {
        this.socket.on('isVerified', data => {
            observer.next(data)
            observer.complete()
        })
    })
}
isVerified(){
this.socket.emit('verify');
返回新的可观察对象(观察者=>{
this.socket.on('isVerified',data=>{
观察员:下一个(数据)
观察员:完成()
})
})
}
数据将返回true或false,因此在我的route guard中

canActivate(): Observable<boolean> {
    this._chat.isVerified()
        .subscribe(
            res => {
                return res
            },
            err => console.log(err)
        )
}
canActivate():可观察{
这个。_chat.isVerified()
.订阅(
res=>{
返回res
},
err=>console.log(err)
)
}

但它告诉我“一个声明类型既不是'void'也不是'any'的函数必须返回一个值。”我一直在绞尽脑汁试图弄明白如何使这一点起作用,我读了很多其他问题,但都没有结果。Console logging res确实为我提供了true或false。

canActivate
返回类型为可观察的| Promise | boolean

因此,在您的案例中,您应该返回一个可观察值:

canActivate(): Observable<boolean> {
    this._chat.isVerified();
}
canActivate():可观察{
这个._chat.isVerified();
}

那么订阅的是什么?路由器模块将订阅您通过的可观察对象。啊,我知道我当时在哪里感到困惑了。