reactjs - Tableau API 未捕获(承诺中)异常 $ {_message:“参数不能为空或为空:fieldName”
问题描述
希望这里的人可以帮助我弄清楚为什么我会收到此错误消息。我一直在使用 React Hooks 将一个类组件重构为一个功能组件,并且我一直在执行 console.log() 几乎可以检查的每一行,以确保我返回的值与原始代码相同。控制台中的所有内容都匹配,直到我到达异步等待部分,这就是控制台指示我遇到“参数不能为空或为空:fieldName”问题的地方。有人有想法么?蒂亚!(顺便说一句,我知道这里要显示很多代码,但是因为只有登录我们的 VPN 才能访问仪表板,所以我不知道有什么更好的方法来显示代码。)
const Categorical = () => {
let viz = useSelector(state => state.fetchDashboard);
const filterSelect = useSelector(state => state.fetchFilterSelect);
let filterApplied = useSelector(state => state.fetchFilter);
const globalFilterTitles = ["Region", "Service Area", "Contract - Cohort"];
const globalFilters = useSelector(state => state.globalFilters)
const dispatch = useDispatch();
const selectedDashboard = useSelector(state => state.selectedDashboard);
const handleChange = (event, key, filterTitle) => {
let selectedValues = filterApplied;
let ind = event.target.value.indexOf("All");
if (filterSelect[key].indexOf("All") > -1) {
if (ind === -1) {
selectedValues[key] = [];
} else {
event.target.value.shift();
selectedValues[key] = event.target.value;
}
} else if (filterSelect[key].indexOf("All") > -1) {
if (ind > -1) {
selectedValues[key] = filterSelect[filterTitle];
} else if (
event.target.value.length + 1 ===
filterSelect[filterTitle].length
) {
selectedValues[key] = filterSelect[filterTitle];
} else {
selectedValues[key] = event.target.value;
}
} else selectedValues[key] = event.target.value;
console.log(selectedValues[key]);
return (
prevState => ({
...prevState,
filterApplied: selectedValues[key]
}),
async function () {
const values =
filterSelect[key].indexOf("All") > -1
? ""
: filterSelect[key];
const fType = values === "" ? "All" : "Replace";
let sheet = await viz
.getWorkbook()
.getActiveSheet()
.getWorksheets()
.get("Index");
sheet
.applyFilterAsync(filterTitle, values, fType)
.then(function () { })
.otherwise(function (err) {
alert(err);
});
let filterNames = {};
let filters = await sheet.getFiltersAsync();
for (let filter in filters) {
if (!isNaN(parseInt(filter))) {
if (
filters[filter].getFilterType() === "categorical" &&
filters[filter].getFieldName() !== "Measure Names" &&
filters[filter].getFieldName() !== "Measure Values" &&
filters[filter].getFieldName().search("_hide") < 0
) {
let filterTitle = filters[filter].getFieldName();
filterNames[filterTitle] = [];
console.log(filterNames[filterTitle])
let len = filters[filter].getAppliedValues().length;
if (
selectedDashboard.categoryForceSelect.indexOf(
filterTitle
) === -1 &&
len !== 0 &&
filterSelect[filterTitle].length - 1 === len
) {
filterNames[filterTitle].push("All");
}
for (let i = 0; i < len; i++) {
if (filters[filter].getAppliedValues()[i].value !== null) {
filterNames[filterTitle].push(
filters[filter].getAppliedValues()[i].value
);
}
}
}
}
}
fetchFilter(filterNames);
if (globalFilterTitles.indexOf(filterTitle) > -1) {
console.log(globalFilterTitles.indexOf(filterTitle));
//take previous value of filters
globalFilters[filterTitle] = filterNames[filterTitle]; // add new values to previous values
console.log(globalFilters);
setGlobalFilters(globalFilters);
} //update state with most recent values.
//Now whenever a new dashboard is requested, the most recent state of global filters will be applied.
}
);
};
解决方案
我发现 sheet.applyFilterAsync(filterTitle) 值返回为未定义;一旦我将其更改为键入相应的位置,它就会按预期工作。
推荐阅读
- dagger-2 - Dagger 2 中的错误:无法解析组件类/组件类没有代码生成
- java - Http 请求延迟到其他微服务
- c# - 以下一代格式提供图像,在不更改旧链接的情况下替换图像
- r - autoarfima 使用 R 中的 rugarch 包选择 arfima 模型的参数
- kubernetes - 从文件中删除特定类型除外:kubectl delete -{not}l type=volume -f file.yml
- android - Android WebView:使用 Flutter 加载网页构建的最佳设置
- python - 当比较明显为真时,if 语句将比较识别为假
- linux - Laravel:新创建的日志文件存在所有权问题
- sql - 如何使 Google BQ 合并声明起作用?
- json - 如何解码带有扩展名的 JSON 嵌套字典数组:可解码?