Nikulio
@Nikulio
NaN !== NaN

Почему не могу использовать await в if блоке?

Всем привет
Есть такой AC :

export const renderNotes = (user , users) => async dispatch => {
  Object.keys(users).map(element => {
    if (user === users[element].login) {
      let elements = await fire.database().ref('users/' + element + '/notes/'); // Сейчас тут ошибка
      return dispatch({
        type: RENDER_NOTES,
        payload: elements
      })
    }
  })
};


Так - всё работает :

export const renderNotes = (user , users) => async dispatch => {
  let elements = await fire.database().ref('users/' + element + '/notes/'); // Вынес сюда присвоение
  
  Object.keys(users).map(element => {
    if (user === users[element].login) {
      return dispatch({
        type: RENDER_NOTES,
        payload: elements
      })
    }
  })
};


Почему не могу использовать await в If() ?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
  • rockon404
    @rockon404
    Frontend Developer
    Дело не в условном операторе, а в том, что у вас колбек у map не асинхронная функция и в ней нельзя использовать ключевое слово await. Исправить можно так:
    export const renderNotes = (user , users) => dispatch => {
      Object.keys(users).forEach(async element => {
        if (user === users[element].login) {
          const elements = await fire.database().ref('users/' + element + '/notes/'); 
    
          return dispatch({
            type: RENDER_NOTES,
            payload: elements,
          });
        }
      })
    };


    В случае когда надо лишь пройтись по элементам массива, использовать метод map неправильно, для таких случаев есть метод forEach.

    map следует использовать тогда, когда на основе исходного массива, надо получить новый массив элементов, преобразованных по определенному алгоритму:
    const srcArray = [ 0.134555, 0.294587, 0.570858];
    
    const mappedArray = srcArray.map(el => (el * 100).toFixed(1) + '%');
    
    console.log(mappedArray);
    
    // => ["13.5%", "29.5%", "57.1%"]
    Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы