我有这些模特:
扑灭:
export default Model.extend({
teams: hasMany('team')
});
团队:
export default Model.extend({
closed: attr('boolean'),
fight: belongsTo('fight'),
players: hasMany('player')
});
播放器:
export default Model.extend({
team: belongsTo('team'),
nickname: belongsTo('nickname')
});
昵称:
export default Model.extend({
nickname: belongsTo('nickname')
});
现在我在战斗页面,我有一个昵称的列表,点击我需要的每个昵称到:
所有内容都适用于此代码:
fight.get('teams').then((all_teams) => {
let count_teams = all_teams.get('length');
if (count_teams > 0) {
let last_team = all_teams.objectAt(count_teams - 1);
if (last_team.get('closed') === false) {
saveNewPlayer(last_team);
} else {
saveNewTeam();
}
} else {
saveNewTeam();
}
function saveNewTeam() {
let new_team = store.createRecord('team', {
fight: fight
});
new_team.save().then((new_team) => {
saveNewPlayer(new_team);
}).catch(() => {
new_team.rollbackAttributes();
});
}
function saveNewPlayer(last_team) {
let newPlayer = store.createRecord('player', {
team: last_team
});
newPlayer.save().then(() => {
// handle aftersave
}).catch(() => {
newPlayer.rollbackAttributes();
});
}
});
但是当与服务器的互联网连接速度很慢时会出现问题。
如果我点击许多昵称代码检查战斗的实际状态,它说:“没有团队在这里打开(可用),我需要一个新的”并且你可以想象(因为互联网是蹩脚的)它只用一个玩家创造了很多团队,就像我点击每个昵称一样多。
我该如何解决这个问题?
我需要像队列一样的东西吗?
也许我可以点击一个播放器然后在检查期间如果我再次点击我可以排队下一个播放器?但我需要立即显示添加的球员名单。
如何?
答案 0 :(得分:0)
为了防止向服务器发送大量请求,最好防止下一个请求。还有其他选择,例如禁用按钮,忽略下一步操作等。
我们正在使用ember-concurrency插件来处理此类用例。它明显地放弃了下一步行动。