axios / Json for 循环,如何防止这个错误?
Axios / Json for loop, How can I prevent this error?
我的部分代码是这样的,URL 在 for 循环下。
axios.get(Url).then((response) => {
let getJsonAPI = response.data.data.products;
if (response.data.data.products.length > 0) {
state.jsonGetProductsAPI.push(getJsonAPI);
}
});
我收到此错误是因为响应不包含产品 属性
我只想在“数据”树中有内容时才推送 getJsonAPI。代码按预期工作,但有一个错误,我的强迫症不允许我继续这个项目:(有什么想法吗?我是新手
发生这种情况是因为 undefined.length 抛出错误。
if (response && response.data && response.data.data &&
response.data.data.products && response.data.data.products.length) {
state.jsonGetProductsAPI.push(getJsonAPI);
}
这段代码不会抛出错误:)
您应该检查 data
是否存在。
如果您在方法顶部进行所有数据检查并在那里进行救助(return 或任何其他可接受的),会更容易。
axios.get(Url).then((response) => {
if (!response.data || !response.data.data || !response.data.data.products) {
return
}
// now you are sure that response.data.data.products is truthy
let getJsonAPI = response.data.data.products;
if (response.data.data.products.length > 0) {
state.jsonGetProductsAPI.push(getJsonAPI);
}
});
PS:不能容忍错误,应该不是强迫症的问题
您可以只使用 optional chaining (?.) 语法。它专为像您这样的情况而设计,因此您可以将 a && a.b && a.b.c
替换为 a?.b?.c
:
axios.get(Url).then((response) => {
const products = response.data.data.products;
if (products?.length) {
state.jsonGetProductsAPI.push(products);
}
});
如果在某些情况下响应不包含 data
属性,您也应该选择性地链接它:
const products = response.data.data?.products;
另请注意,您不需要任何 polyfill,Vue 会为您转换它(转换为 a && a.b && a.b.c
语法)。
我的部分代码是这样的,URL 在 for 循环下。
axios.get(Url).then((response) => { let getJsonAPI = response.data.data.products; if (response.data.data.products.length > 0) { state.jsonGetProductsAPI.push(getJsonAPI); } });
我收到此错误是因为响应不包含产品 属性
我只想在“数据”树中有内容时才推送 getJsonAPI。代码按预期工作,但有一个错误,我的强迫症不允许我继续这个项目:(有什么想法吗?我是新手
发生这种情况是因为 undefined.length 抛出错误。
if (response && response.data && response.data.data &&
response.data.data.products && response.data.data.products.length) {
state.jsonGetProductsAPI.push(getJsonAPI);
}
这段代码不会抛出错误:)
您应该检查 data
是否存在。
如果您在方法顶部进行所有数据检查并在那里进行救助(return 或任何其他可接受的),会更容易。
axios.get(Url).then((response) => {
if (!response.data || !response.data.data || !response.data.data.products) {
return
}
// now you are sure that response.data.data.products is truthy
let getJsonAPI = response.data.data.products;
if (response.data.data.products.length > 0) {
state.jsonGetProductsAPI.push(getJsonAPI);
}
});
PS:不能容忍错误,应该不是强迫症的问题
您可以只使用 optional chaining (?.) 语法。它专为像您这样的情况而设计,因此您可以将 a && a.b && a.b.c
替换为 a?.b?.c
:
axios.get(Url).then((response) => {
const products = response.data.data.products;
if (products?.length) {
state.jsonGetProductsAPI.push(products);
}
});
如果在某些情况下响应不包含 data
属性,您也应该选择性地链接它:
const products = response.data.data?.products;
另请注意,您不需要任何 polyfill,Vue 会为您转换它(转换为 a && a.b && a.b.c
语法)。