当函数名称是保留字时如何使用 Redux Saga "call" 函数以及如何进行链式函数调用?

How can I use Redux Saga "call" function when the function name is a reserved word and how do I do chained function calls?

 yield action.user.delete() && database.ref(url).remove()

我需要使用 Firebase 函数在 redux-sagas 的两个函数中使用 call()。在action.user.delete(),我做不到 yield {delete} = action.usercall([action.user, delete]),因为delete是保留字。在 database.ref(url).remove() 中,我不知道如何将 call() 用于链式函数。

有几个语法选项可以处理 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"]);
};