我工作的聊天应用程序,它是在服务器端的Node.js + MongoDB的(猫鼬库),并Angular.js在客户端。的Node.js + Angular.js有望同步问题
我有一个数据库集合(MongoDB的)的房间(在应用程序中所有的房间),它看起来像这样:
// ------- creating active_rooms model -------
var active_rooms_schema = mongoose.Schema({
room_name: String,
users: [String]
});
var active_rooms = mongoose.model('active_rooms', active_rooms_schema);
该数据库包含其所有用户的房间(即“我的室内阴凉处“与用户:”迈克“,”乔“和”戴夫“)。
我想要做的是 - 每一个用户想在在我的Angular.js客户端聊天室(有一些房间名)的时候,我想:
- 创建,如果房间是不存在
- 推该用户进入房间的用户阵列。
我知道,因为1,我将永远有一个用户数组的空间。
这是我的角相关代码:(我不能在这里给整个应用,因为它的方式过大和不相关的。)
$scope.enterRoom = function(info) {
$q.when(create_room_if_not_exists($scope.room)).then(add_user_to_room($scope.name, $scope.room));
$location.path("chat");
}
var create_room_if_not_exists = function(room_name) {
var deferred = $q.defer();
is_room_already_exists({
'name': room_name
}).then(function(response) {
if (!response.data.is_room_exists) {
register_room({
'name': room_name
});
console.log("room: " + room_name + ", was created");
deferred.resolve();
}
}, function(error) {
deferred.reject(error.data);
});
return deferred.promise;
}
var add_user_to_room = function(user_name, room_name) {
console.log(user_name)
add_user_to_room_request({
'user_name': user_name,
'room_name': room_name
});
}
var is_room_already_exists = function(info) {
return $http({
url: '/is_room_already_exists',
method: 'POST',
data: info
});
}
var add_user_to_room_request = function(info) {
$http({
url: '/add_user_to_room',
method: 'POST',
data: info
});
}
var register_room = function(info) {
return $http({
url: '/register_room',
method: 'POST',
data: info
});
}
什么情况是,第二个动作一日一之前发生。当我在控制台上打印日志时,我看到了这一点,但我不知道为什么。
这些行动都到达通过HTTP请求到服务器 - 所以我不认为这个问题是存在的。
如图所示,两个XHR将链接。位置路径将在两个XHR完成之前发生变化。当你说“第二次行动发生在第一次行动之前”时,你是否谈论XHR在XHR完成之前没有链接或位置改变? – georgeawg
我正在谈论XHR不链接 – Matoy
注意:您可能想尝试简单地将用户添加到房间,然后只在第一次呼叫失败时尝试创建房间。它将完全消除对“is_room_already_exists”函数的需求。 – idbehold