当函数名称是保留字时如何使用 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.user
或call([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"]);
};
yield action.user.delete() && database.ref(url).remove()
我需要使用 Firebase 函数在 redux-sagas 的两个函数中使用 call()
。在action.user.delete()
,我做不到
yield {delete} = action.user
或call([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"]);
};