我遇到的问题是在NetSuite中执行用户事件脚本时,我一直收到以下错误:
TypeError: Cannot read property "amazon" from undefined
NetSuite使用Javascript在客户端和服务器端执行业务逻辑。对于没有NetSuite经验的用户,在服务器上执行用户事件脚本。
我可以分享的代码如下:
var qtyAvail = 0;
qtyAvail = rec.getValue('locationquantityavailable');
if(!qtyAvail || qtyAvail === 'undefined' || qtyAvail === null || isNaN(qtyAvail) || typeof qtyAvail === "undefined"){
qtyAvail = 0;
}
location = rec.getValue(kColumns[3]);
if(location == 7 ||location == 16 ||location == 20 ||location == 3 ||location == 19 ||location == 1 ||location == 27 ||location == 27){
if(location == 7){
fba = qtyAvail;
if(!fba){
qtyAvail = 0;
}
}
...more business code here....
return {
amazon: fba,
ups: upsName
}
我正在调用返回值,如:
var itemQty = getLocationQty(item);
if(itemQty.amazon){
var fbaStock = itemQty.amazon;
} else { fbaStock = 0;}
此代码适用于我的某些位置,但如果特定位置没有可用数量,则返回undefined,而不是像我期望的那样将qtyAvail设置为0。
我是否错过了在任何地方检查未定义的比较,或者其他人是否看到代码有任何问题?
答案 0 :(得分:1)
从您收到的代码段看起来,您似乎没有初始化fba的值。
在开始时添加var fba=0;
,看看是否修复了它。
或许你的意思是将qtyAvail分配给亚马逊而不是fba。
答案 1 :(得分:1)
从您共享的代码和原始描述中看起来,您从函数返回的对象文字实际上并未返回。 'amazon'是该对象的属性,因为错误说它未定义,那么该函数没有返回任何内容。
在JS引擎中运行以下代码:
function foo()
{
return;
}
alert( foo().amazon );
你会看到:
TypeError:无法读取未定义的属性'amazon'
我发现你找到了一个解决方案,我只是看不出它与你报告的原始问题有什么关系。我错过了什么吗?
同样,虽然不是你问题的一部分,但我想我可能会提到另一种编写位置检查的方法,更容易理解:
var acceptedLocations = [ 7, 16, 20, 3, 19, 1, 27 ];
if(acceptedLocations.indexOf(location) > 0)
{
// Do rad stuff
}