Dollchan-Extension-Tools
Dollchan-Extension-Tools copied to clipboard
Слетела привязка поста к принадлежащим мне постам
Странным образом у меня подвисла вкладка и пропала привязка поста ко мне. Вот скрин: https://puu.sh/zOkX9/92f6b498e1.png
Я обновил страницу почти сразу после постинга и привязка пропала, причём вкладка подвисла на 0.3-0.5с. Поведение похоже на race condition, после постинга само сообщение не успело записаться в хранилище как моё из-за обновления страницы.
Firefox 59, linux.
Вы обновили страницу раньше, чем появился пост в треде после отправки?
Ну так сами себе злобный буратино же. Скрипт не занесет пост в хранилище моих постов, если ответ от сервера не успел прийти.
В ответе от сервера в формате json
должен содержаться номер вашего поста, и скрипт его заносит в хранилище locStorage['de-myposts']
.
Нет, иногда слетает и сильно позже. Мне кажется это связано с #1198
Хм. Не сталкивался ниразу.
Правда, я почти не пощу нигде :D
MyPosts.set есть только в одном месте - в checkUpload
.
MyPosts.set(postNum, tNum || postNum);
где set
const MyPosts = new class MyPostsClass extends PostsStorage {
....
set(num, thrNum) {
super.set(num, thrNum);
this._cachedData.add(+num);
sendStorageEvent('__de-mypost', 1);
}
где super.set
class PostsStorage {
....
set(num, thrNum, data = true) {
const storage = this._readStorage();
if(storage && storage.$count > 5e3) {
const minDate = Date.now() - 5 * 24 * 3600 * 1e3;
for(const b in storage) {
if(storage.hasOwnProperty(b)) {
const data = storage[b];
for(const key in data) {
if(data.hasOwnProperty(key) && data[key][0] < minDate) {
delete data[key];
}
}
}
}
}
(storage[aib.b] || (storage[aib.b] = {}))[num] = [this._cachedTime, thrNum, data];
this._saveStorage();
}
где
_saveStorage() {
if(this._cacheTO === null) {
this._cacheTO = setTimeout(() => {
if(this._cachedStorage) {
locStorage[this.storageName] = JSON.stringify(this._cachedStorage);
}
this.purge();
}, 0);
}
}
Где тут может быть подвох? Разве что после отправки поста между this._readStorage();
и this._saveStorage();
на одной вкладке зайти в другую вкладку и чудом успеть запостить другой пост.