我在具有redux-saga eventChannel的Android上将react-native wrapper用于google sms-retriever api,以订阅外部事件,例如:
import { eventChannel } from 'redux-saga';
import { take, call } from 'redux-saga/effects';
import SmsRetriever from 'react-native-sms-retriever';
function createOnOTPChannel() {
return eventChannel((emit) => {
SmsRetriever.addSmsListener((event) => {
console.log('received event in channel');
emit(event.message);
});
return () => {
console.log('removing');
SmsRetriever.removeSmsListener();
};
});
}
function* watchOTP() {
const registered = yield SmsRetriever.startSmsRetriever();
if (registered) {
const otpChannel = yield call(createOnOTPChannel);
while (true) {
const payload = yield take(otpChannel);
console.log(payload);
}
}
}
export default watchOTP;
但是,只有第一个带有OTP的短信会被接收和发送,随后的所有消息都将被忽略,而监听器永远不会被杀死(即removing
永远不会被记录)。
我对redux-saga
一无所知,而这个eventChannel
仅遵循the docs中的示例。
我没有意识到-react-native-sms-retriever
库,redux-saga
或我的实现是否存在问题?以及如何使其按预期工作