在m4更新之后,StreamController.broadcast()被删除,我发现asBroadcastStream不能被多次调用。这意味着您必须存储流(如 Ugly 类中那样),而不是仅使用 getter(如 Pretty 类中那样)。
这是设计使然,还是我做错了?
void main() {
Pretty p = new Pretty();
//This does not work.
p.onChange.listen((n) => print(n));
//This second call throws: "Bad state: Stream already has subscriber". Why?
p.onChange.listen((n) => print(n));
//This does work.
Ugly u = new Ugly();
u.onChange.listen((n) => print(n));
u.onChange.listen((n) => print(n));
}
class Pretty{
StreamController<int> _streamCtrl = new StreamController<int>();
Stream<int> get onChange => _streamCtrl.stream.asBroadcastStream();
}
class Ugly{
StreamController<int> _streamCtrl = new StreamController<int>();
Stream<int> _onChange;
Stream<int> get onChange => _onChange;
Ugly(){
_onChange …Run Code Online (Sandbox Code Playgroud) 我是JavaScript和PHP的新手,所以我有一个问题,如果有一种方法可以在浏览器的网站上检测同一会话的多个选项卡或窗口.在我正在制作的网站上,当用户登录时,布尔(0-1)变量存储在数据库中的用户表中,该变量显示该用户是否已登录.在某人登录并关闭标签或浏览器窗口后,数据库再次更新它更改显示用户是否登录的变量.我这样做的方法是只调用脚本下面
$(window).bind("beforeunload",function(){
$.ajax({
url: "logout.php",
async: false
});
})
Run Code Online (Sandbox Code Playgroud)
如果用户关闭窗口或选项卡,logout.php将更新数据库.我的问题是,如果有人使用同一网站的同一会话打开多个选项卡,并且只关闭其中一个会话将保留,而数据库将更新该用户不再被记录.
编辑:我不想注销所有打开的标签,我只是不想保留用户仍然在线的数据库,直到他关闭他的会话的所有标签窗口或点击退出按钮.