本文整理匯總了TypeScript中redux-saga/effects.actionChannel函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript actionChannel函數的具體用法?TypeScript actionChannel怎麽用?TypeScript actionChannel使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了actionChannel函數的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: watchCreateAndRemoveLastPosition
// use channel to make sure every create/remove run one by one
function* watchCreateAndRemoveLastPosition(): SagaIterator {
try {
const createLastPositionChan: TakeableChannel<{}> = yield actionChannel(
getType(lastPositionsCreator.createLastPosition)
)
const removeLastPositionChan: TakeableChannel<{}> = yield actionChannel(
getType(lastPositionsCreator.removeLastPosition)
)
while (true) {
const [createLastPositionAction, removeLastPositionAction]: [
ReturnType<typeof lastPositionsCreator.createLastPosition> | void,
ReturnType<typeof lastPositionsCreator.removeLastPosition> | void
] = yield race([take(createLastPositionChan), take(removeLastPositionChan)])
if (createLastPositionAction) {
yield call(createLastPosition, createLastPositionAction)
}
if (removeLastPositionAction) {
yield call(removeLastPosition, removeLastPositionAction)
}
}
} catch (err) {
console.error(err)
}
}
示例2: sync
function* sync() {
const channel = yield actionChannel(SyncType);
while (true) {
const { syncItem } = yield take(channel);
yield call(handleRequest, syncItem);
}
}
示例3: addBotHelper
function* addBotHelper() {
const reqChannel = yield actionChannel(A.ReqAddBot)
try {
while (true) {
yield take(reqChannel)
const { game, stages }: State = yield select()
if (!game.remainingBots.isEmpty()) {
let spawnPos: Point = yield select(selectors.availableSpawnPosition)
while (spawnPos == null) {
yield Timing.delay(200)
spawnPos = yield select(selectors.availableSpawnPosition)
}
yield put(actions.removeFirstRemainingBot())
const level = game.remainingBots.first()
const hp = level === 'armor' ? 4 : 1
const tank = new TankRecord({
tankId: getNextId('tank'),
x: spawnPos.x,
y: spawnPos.y,
side: 'bot',
level,
hp,
withPowerUp: TANK_INDEX_THAT_WITH_POWER_UP.includes(20 - game.remainingBots.count()),
frozenTimeout: game.botFrozenTimeout,
})
const difficulty = stages.find(s => s.name === game.currentStageName).difficulty
const spawnSpeed = AI_SPAWN_SPEED_MAP[difficulty]
yield put(actions.setIsSpawningBotTank(true))
yield spawnTank(tank, spawnSpeed)
yield put(actions.setIsSpawningBotTank(false))
yield fork(botSaga, tank.tankId)
}
}
} finally {
yield put(actions.setIsSpawningBotTank(false))
reqChannel.close()
}
}
示例4: testActionChannel
function* testActionChannel(): SagaIterator {
// typings:expect-error
yield actionChannel();
/* action type */
yield actionChannel('my-action');
yield actionChannel('my-action', actionBuffer);
// typings:expect-error
yield actionChannel('my-action', nonActionBuffer);
/* action predicate */
yield actionChannel(
(action: Action) => action.type === 'my-action',
);
yield actionChannel(
(action: Action) => action.type === 'my-action',
actionBuffer,
);
// typings:expect-error
yield actionChannel(
(action: Action) => action.type === 'my-action',
nonActionBuffer,
);
// typings:expect-error
yield actionChannel(
(item: {someField: string}) => item.someField === '--',
actionBuffer
);
// typings:expect-error
yield actionChannel(() => {});
// typings:expect-error
yield actionChannel(() => {}, actionBuffer);
/* stringable action creator */
yield actionChannel(stringableActionCreator);
yield actionChannel(stringableActionCreator, buffers.fixed<MyAction>());
// typings:expect-error
yield actionChannel(stringableActionCreator, nonActionBuffer);
/* array */
yield actionChannel([
'my-action',
(action: Action) => action.type === 'my-action',
stringableActionCreator,
]);
// typings:expect-error
yield actionChannel([() => {}]);
}