javascript - 如何缩短此功能的使用时间?Alexa/NodeJs
问题描述
我有这个函数用来返回一个槽值。如果槽是同义词,它会将同义词修改为规范槽值。这是我现在拥有的代码:
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slot, useId) => {
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
};
//Example
//let category = slotValue(handlerInput.requestEnvelope.request.intent.slots.category, true);
module.exports = new slotHelper();
我正在尝试将 //example 缩短到我可以输入以下内容的位置:
let category = slotHelper.slotValue(category);
并返回规范槽值。
我尝试了一些不同的方法,它们都导致:“错误处理:未定义类别”
以下是我尝试的不同方法:
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slotName, useId) => {
let slot = handlerInput.requestEnvelope.request.intent.slots[slotName];
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
}
module.exports = new slotHelper();
和
var slotHelper = function() { };
slotHelper.prototype.slotValue = (slotName, useId) => {
let slot = handlerInput.requestEnvelope.request.intent.slots.slotName;
let value = slot.value;
let resolution = (
slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0
)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if (resolution && resolution.status.code == 'ER_SUCCESS_MATCH') {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId
? resolutionValue.id
: resolutionValue.name;
}
return value;
}
module.exports = new slotHelper();
当然,第二个 slotName 是灰色的,因为这不是正确的方法。有谁知道如何将其修改为可以使用的位置:
let category = slotHelper.slotValue(category);
我正在尝试概括此功能,以便将来可以将其用于所有插槽。这将使在我的代码中更容易使用......而不是总是必须放置:
let category = slotHelper.slotValue(handlerInput.requestEnvelope.request.intent.slots.category);
解决方案
一个可能有助于消除通过检查您的resolutionsPerAuthority
数组是否存在而引入的大量样板的建议可能是使用lodash 的head
方法:
const resolution = _.head(slot.resolutions.resolutionsPerAuthority);
_.head
可以处理 null 或空数组输入,因此这应该有助于减少函数的大量认知开销。
推荐阅读
- mongodb - 如何在 MongoDB 中使用两个字段进行双组和推送?
- java - Postgres 更新查询导致锁定等待飙升
- haskell - 如何在 Haskell 中编写代码以从列表中过滤掉 Nothing 值
- openstack - 策略不允许执行 os_compute_api:os-flavor-manage:create。(HTTP 403)
- c# - nodejs Net socket客户端与c#.net服务器应用程序通信
- php - 警告:strpos():第 XXXX 行 /XXX/post.php 中的空针
- python - Python 的 Serial 返回什么类型的 unicode?无法在 Python2.7 中解码(奇怪的输出)
- typescript - TypeScript 阻止文件成为模块?
- java - 在一个请求中设置多个参数
- mysql - 即使新值相同,MySQL“ON DUPLICATE KEY UPDATE”是否也会替换该值?