Как я могу использовать функцию «вызова» Redux Saga, если имя функции является зарезервированным словом, и как мне выполнять цепные вызовы функций? - PullRequest
0 голосов
/ 18 января 2019
 yield action.user.delete() && database.ref(url).remove()

Мне нужно использовать call() в обеих функциях в redux-sagas с использованием функций Firebase. В action.user.delete() я не могу yield {delete} = action.user или call([action.user, delete]), потому что delete является зарезервированным словом. А в database.ref(url).remove() я не знаю, как использовать call() для связанных функций.

1 Ответ

0 голосов
/ 19 января 2019

Существует несколько опций синтаксиса для работы с delete как зарезервированным словом:

  • Передать строку для имени функции в метод call
  • Получить ссылку на функцию delete в переменной с другим именем

Оба варианта показаны ниже.

Для связанных функций вы просто разбиваете цепочку на отдельные вызовы и используете результат одного вызова для выполнения следующего вызова. Я включил пример выполнения цепных вызовов после двух delete примеров.

import { call } from "redux-saga/effects";

const refResponse = {
  remove: () => {
    console.log("You removed me!");
  }
};
const action = {
  user: {
    delete: () => {
      console.log("You deleted me!");
    }
  }
};
const database = {
  ref: () => {
    console.log("Returning ref");
    return refResponse;
  }
};
export const starter = function*() {
  console.log("before call");
  yield call([action.user, "delete"]);
  console.log("after call using string for function name");
  const deleteFunc = action.user.delete;
  yield call([action.user, deleteFunc]);
  console.log("after call using function variable");

  console.log("before start of chained call");
  const result = yield call([database, "ref"]);
  console.log("before 2nd part of chained call");
  yield call([result, "remove"]);
};

Edit 9470nnlwmy

...