我正在将Google Apps脚本与JavaScript代码一起使用,并运行UrlFetchApp,以从Stripe API中提取数据以检索发票。然后,脚本将API中的数据更新为Google表格模板。
我遇到的问题是,如果API在特定行上没有针对客户的数据,则会破坏脚本。该API将缺少的数据存储为NULL,例如当客户在发票上没有折扣时使用"discount": null
。
当脚本未显示任何数据时,NULL响应将中断脚本并停止运行。我要做的是返回一个值,该值指定没有数据(例如:无折扣地返回数字0),并使脚本在其余代码行中运行。
我的代码:
function getInvoiceObj()
{
var apiKey, content, options, response, secret, url;
secret = "rk_live_xxxxxxxxxxxxxxxxxx";
apiKey = "xxxxxxxxxxxxxxxxx";
url = "https://api.stripe.com/v1/invoices/in_xxxxxxxxxxxxx?expand[]=charge&expand[]=customer";
options = {
"method" : "GET",
"headers": {
"Authorization": "Bearer " + secret
},
"muteHttpExceptions":true
};
response = UrlFetchApp.fetch(url, options);
//Push data to Sheet from invoice. **Writes over existing Sheet data**
content = JSON.parse(response.getContentText());
var sheet = SpreadsheetApp.getActiveSheet();
/* Customer Discount */
sheet.getRange(21,2).setValue([content.discount.coupon.percent_off]);
}
答案 0 :(得分:1)
您可能正在寻找if
if(content.discount===null)
sheet.getRange(21,2).setValue([0]);
else
sheet.getRange(21,2).setValue([content.discount.coupon.percent_off]);
也许?:
sheet.getRange(21,2).setValue([
content.discount===null?0:content.discount.coupon.percent_off
]);
答案 1 :(得分:1)
这有点棘手,并且从现在开始已经使用多年了,您的问题是import React from "react";
import { Route, BrowserRouter as Router } from "react-router-dom";
import Home from "./Home";
import List from "./List";
import Hotel from "./Hotel";
import './styles/app.scss';
class App extends React.Component {
render() {
return (
<Router>
<div className="app">
<Route path="/" component={Home} exact />
<Route path="/hotels/:selectedCountry/:datefrom?:dateto?" component={List} />
<Route path="/hotels/:selectedCountry/:selectedHotel:datefrom?:dateto?" component={Hotel} />
</div>
</Router>
);
}
};
export default App;
中不存在coupon
,因此无法从未定义的属性中获取任何值(因此脚本中断),有几种技术可以从不存在的对象访问属性,例如:
discount
结构
try...catch
可选对象传递
try {
sheet.getRange(21,2).setValue([content.discount.coupon.percent_off]);
} catch() {
sheet.getRange(21,2).setValue([0]);
}
嵌套的存在
const discountValue = ((content.discount || {}).coupon || {}).percent_off || 0;
sheet.getRange(21,2).setValue([discountValue]);
关于属性访问的一些抽象
const discountValue = (content.discount && content.discount.coupon && content.discount.coupon.percent_off) || 0;
sheet.getRange(21,2).setValue([discountValue]);
仍然,等待const getPropertySafe = (props, object) => props.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, object)
const value = getPropertySafe(['discount', 'coupon', 'percent_off'], content)
sheet.getRange(21,2).setValue([value || 0]);
很快
The Existential Operator