如何使用redux-saga eventChannel实现react-native-sms-retriever?

时间:2019-12-26 07:06:39

标签: android react-native redux-saga smsretriverapi

我在具有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或我的实现是否存在问题?以及如何使其按预期工作

0 个答案:

没有答案