#typescript #generator #redux-saga
#typescript #генератор #redux-сага
Вопрос:
Давайте подумаем о следующей саге:
function* mySaga(){
const x = yield call(getX)
}
По правде говоря, значение const x
напрямую присваивается не возвращаемым значением call(getX())
, а скорее тем, что передается в mySaga.next(whatever)
при его вызове.
Я предполагаю, что redux-saga достаточно умен, чтобы управлять saga таким образом, чтобы он вызывал .next()
метод с результатом выполнения последнего обещания.
Но так ли это, однако? Насколько безопасно просто предполагать, что x
на самом деле является результатом getX()
?
Ответ №1:
Насколько безопасно просто предположить, что x на самом деле является результатом getX()
Если генератор запускается redux saga, то до тех пор, пока getX
что-то возвращает (т. Е. Не выбрасывает и не переходит в бесконечный цикл), redux saga гарантирует, что сага будет возобновлена с этим возвращаемым значением и, таким образом, присвоена x
.
Если вы вручную пройдете сагу, то она получит все, что вы вставите вручную. Пожалуй, единственная причина, по которой я могу подумать о повторении saga вручную, — это написать модульный тест, так что вам не о чем беспокоиться, если вы используете redux saga в том виде, в каком она была разработана.