首页 > 解决方案 > 当函数名是保留字时,如何使用 Redux Saga “调用”函数,以及如何进行链式函数调用?

问题描述

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

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

标签: javascriptfirebaseredux-sagamethod-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"]);
};

编辑 9470nnlwmy


推荐阅读