Как использовать yield внутри карты для React Native - PullRequest
0 голосов
/ 15 января 2019

Моя цель - выполнить разветвленную функцию внутри map.

Вот что я пробовал:

  function* doSomethingWithItem(item) {}

  yield all(items.map(item => {
    // ... some item checking
    return fork(doSomethingWithItem, item);
  }));

Пробовал также использовать yield fork(), но получил ошибку "yield является зарезервированным словом ..."

doSomethingWithItem() не вызывается.

Ценю помощь.

1 Ответ

0 голосов
/ 15 января 2019

Поскольку map использует лямбда-функции, вы не можете получить что-то оттуда напрямую.

yield all является правильным подходом, но вместо fork эффект call выглядит более уместным в этом случае, поскольку он блокирует и, следовательно, сохраняет порядок обработки элементов (если это имеет значение):

function * doSomethingWithItem ( item ) {
  console.log('doSomethingWithItem', item)
}

function * doSomethingWithAllItems ( items ) {
  console.log('doSomethingWithAllItems')
  yield all(items.map(item =>
    call(doSomethingWithItem, item),
  ))
  console.log('done doSomethingWithAllItems')
}

function * mySaga () {
  yield call(doSomethingWithAllItems, [1, 2, 3, 4, 5])
}

Я также проверил ваш код, и doSomethingWithItem работает в моей среде. Попробуйте обернуть ваш код в try / catch, возможно, у вас возникла ошибка, приводящая к остановке саги.

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