Message Bus не работает при изменении настройки пользователя «Пропустить советы и значки для новых пользователей»

Для воспроизведения:

  1. Перейдите по адресу meta.discourse.org/my/preferences/interface

  2. Откройте консоль вашего браузера

  3. Переключите опцию «Пропустить советы по первичной настройке и значки для новых пользователей» и нажмите «Сохранить»

В консоли появится ошибка:

MESSAGE BUS FAIL: callback /user-tips/2770 вызвал исключение onMessage/<@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:4216:653
onMessage@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:4216:597
U.prototype._run@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:4446:94
U.prototype._join@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:4445:256
U.prototype.join@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:4408:13
p@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:2570:63
m/<@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:2573:8
b@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:833:7
w@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:833:274
P@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:846:6
r</k/onProgressListener/t.onprogress@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:849:163
EventHandlerNonNull*onProgressListener@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:849:44
xhr@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:850:27
send@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:468:67
ajax@https://d11a6trkgmumsb.cloudfront.net/assets/vendor-33e08796a908852ea6a675c57d6711f18f2428795ec0f2548e4df9733e003014.br.js:448:12
l@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:4065:10
initialize/n.ajax@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:4069:531
k@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:848:66
n@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:857:25
r</start/e.onVisibilityChange@https://d11a6trkgmumsb.cloudfront.net/assets/chunk.703.1bbc722b2533c9d7510a-e77869e990640cdc164a270bdea9a4b9995366c02a371c298741dcb9d72003ca.br.js:858:166
callback@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:4067:192
d@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:5743:26
p@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:5743:92
m@https://d11a6trkgmumsb.cloudfront.net/assets/discourse-aca223ea4cd01ddb1a6f180395955d62c82cdfd63a0f788938e09aae5af55f55.br.js:5743:129

Переключатель, похоже, работает нормально, несмотря на ошибку, поэтому неясно, является ли это реальной проблемой.

6 лайков

Хорошей идеей будет сначала проверить this.site.user_tips. :smile:

  if (this.site.user_tips) {
    (seenUserTips || []).forEach((userTipId) => {
      this.currentUser.hideUserTipForever(
        Object.keys(this.site.user_tips).find(
          (id) => this.site.user_tips[id] === userTipId
        )
      );
    });
  }

Полагаю, MessageBus отправляется после завершения сохранения; именно поэтому это работает. Это не вредит и не должно быть реальной проблемой.

3 лайка

Технически это значение всегда должно быть установлено. Оно сбрасывается только в том случае, если пользователь заходит на страницу, а администраторы включают подсказки для пользователей уже после этого. По этой причине я считаю, что лучшим решением будет установить refresh: true для этой настройки сайта. В любом случае, ваше решение добавляет дополнительную защиту и закрывает пробел между моментом изменения настройки сайта и обновлением страницы.

Спасибо за ваш интерес! Вот исправление:

3 лайка