Реагировать на мьютекс через глобальную переменную - PullRequest
0 голосов
/ 01 ноября 2018

Мы используем React и Redux
Как мы можем защитить ресурс от доступа к нему с помощью мьютекса?

Можно ли делать это через глобальные переменные и где их хранить?
PS мы не хотим делать это через Redux из-за задержки обновления состояния

Небольшой пример, чтобы дать больше контекста

export default function configureStore() {
  const store = createStore(rootReducer, persistedState, composedEnhancers);
  store.subscribe(
    // saveState saves state to localStorage
    // here we need mutex which will prevent state from saving to localStorage
    // and some way to toggle this mutex
    throttle(() => {
      saveState(store.getState());
    }, 2000),
  );
  return store;
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Я не уверен, что это правильное решение
Имейте в виду, что это работает, потому что store.subscribe слушает изменения состояния редукса

export default function configureStore() {
  const store = createStore(rootReducer, persistedState, composedEnhancers);
    store.subscribe(
      throttle(() => {
        const currentState = store.getState();
        // if we allowing state to sync with localStorage
        if (currentState.isMutexVariable) {
          saveState(currentState);
        }
      }, 2000),
    );
  return store;
}
0 голосов
/ 01 ноября 2018

Возможно, я вас не совсем понимаю. Вы пытаетесь заставить программу ждать завершения строки кода, прежде чем переходить к следующей? Таким образом, несколько «вещей» не обращаются к одному и тому же ресурсу одновременно. Вы можете использовать функцию async / await для этого. Например:

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // wait till the promise resolves (*)

  alert(result); // "done!"
}

f();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...