【问题标题】:How to use yield inside the taskmanager callback react native如何在taskmanager回调中使用yield react native
【发布时间】:2019-08-01 20:55:41
【问题描述】:

我想在 TaskManager.defineTask 回调中使用 yield 并使用 yield 调度 redux 存储,但我做不到

我什么都试过了

import { all, put, call } from 'redux-saga/effects'
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';
import * as Permissions from 'expo-permissions';

function* dispatchLocation(locations){
    console.log("Entro d")
    yield put({ type: 'permission/SET_LOCATION', data: locations })
}

TaskManager.defineTask('LocationWatcher', ({ data: { locations }, error }) => {
    if (error) {
        // check `error.message` for more details.
        return;
    }
    console.log('enn')
    yield dispatchLocation(locations)
});

function* watchLocation(){
    let { status } = yield Permissions.getAsync(Permissions.LOCATION);
    console.log(status)
    if (status === 'granted') {
        Location.startLocationUpdatesAsync('LocationWatcher',{})
    }
}

export default function* rootSaga() {
    //call(watchLocation())
    yield all([
        watchLocation()
    ])
}

【问题讨论】:

    标签: javascript react-redux redux-saga


    【解决方案1】:

    在 javascript 中,如果您想使用 yield,您需要从生成器函数中执行此操作,因此您必须将您的 LocationWatcher 回调重写为类似的生成器函数

    TaskManager.defineTask('LocationWatcher', function* ({ data: { locations }, error }) {
        ...
    });
    

    也就是说这不会完成您在此处寻找的内容 - redux-saga 只能从 LocationWatcher 回调不是的 saga 中调度产生的操作。我认为对您来说更好的方法是导入您的 redux 存储并直接从您的任务中分派您的操作。所以像:

    import store from './path/to/redux/store';
    TaskManager.defineTask('LocationWatcher', ({ data: { locations }, error }) => {
        if (error) {
            // check `error.message` for more details.
            return;
        }
        console.log('enn')
        store.dispatch({ type: 'permission/SET_LOCATION', data: locations })
    });
    

    并完全取消 dispatchLocation 生成器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2021-02-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      相关资源
      最近更新 更多