Discord库存爬取命令中undefined替换为OOS报错,求解决方案
问题:Discord商品库存爬取命令处理undefined库存值报错
我开发了一个用于爬取网站商品库存的Discord命令,当商品无库存时,返回值为undefined。我尝试把它替换成“Out Of Stock”,但用下面的代码时:
if(variant.inventory_quantity == undefined) { let updatedStock = variant.inventory_quantity.replace("undefined", "Out Of Stock") }
出现了**Error reading undefined ".replace()"**错误;改用:
if(variant.inventory_quantity == undefined) { let stock = variant.inventory_quantity.toString(); let updatedStock = stock.replace("undefined", "Out Of Stock") }
又出现**Error reading undefined ".toString()"**错误。
相关核心代码如下:
axios.get(`${newLink}.json`).then((response) => { if (response.data.product.variants) { const { product } = response.data let productName = product.title atcEmbed.setColor("#2B2F51") atcEmbed.setTitle(`Product Found! 💥`) atcEmbed.setURL(link) atcEmbed.setThumbnail(product.images[0].src) product.variants.forEach((variant) => { let cleanlink = link.split('?').toString() let partarr = cleanlink.split("/") cleanlink = partarr.slice(0,3).join('/') var updatedLink = cleanlink + "/cart/" + variant.id + ":1".toString() atcEmbed.setDescription(`**Product:** ${productName}\n**Price:** ${variant.price}\n**SKU:** ${variant.sku}`) atcEmbed.addFields({ name: `${variant.title}`, value: `[ATC](${updatedLink})\n**Stock:** ${variant.inventory_quantity}\n${variant.id}`, inline: true }) })
问题原因
当variant.inventory_quantity为undefined时,你直接调用它的replace()或toString()方法,但undefined本身没有这些方法,因此触发报错。
解决方法
不需要对undefined调用方法,直接通过条件判断赋值即可,有两种简洁实现方式:
- 嵌入字段内直接替换(最简便)
使用空值合并运算符快速处理:
// 替换addFields中的库存部分 **Stock:** ${variant.inventory_quantity ?? "Out Of Stock"}
如果运行环境不支持空值合并运算符,改用兼容性写法:
**Stock:** ${typeof variant.inventory_quantity !== 'undefined' ? variant.inventory_quantity : "Out Of Stock"}
- 提前处理库存变量
在循环内先处理好库存值,再嵌入字段:
product.variants.forEach((variant) => { // 先处理库存值 let stockValue = variant.inventory_quantity ?? "Out Of Stock"; // 兼容写法:let stockValue = typeof variant.inventory_quantity !== 'undefined' ? variant.inventory_quantity : "Out Of Stock"; let cleanlink = link.split('?').toString() let partarr = cleanlink.split("/") cleanlink = partarr.slice(0,3).join('/') var updatedLink = cleanlink + "/cart/" + variant.id + ":1".toString() atcEmbed.setDescription(`**Product:** ${productName}\n**Price:** ${variant.price}\n**SKU:** ${variant.sku}`) atcEmbed.addFields({ name: `${variant.title}`, value: `[ATC](${updatedLink})\n**Stock:** ${stockValue}\n${variant.id}`, inline: true }) })
补充说明
- 空值合并运算符
??会在左侧值为undefined或null时返回右侧值,适合现代JavaScript环境。 - 用
typeof判断可以避免因variant.inventory_quantity字段不存在而触发的额外错误,兼容性更强。
内容的提问来源于stack exchange,提问作者JediSZN
相关产品推荐
相关产品推荐

