Как я могу сократить использование этой функции?Alexa / NodeJs - PullRequest
0 голосов
/ 24 мая 2019

У меня есть эта функция, которую я использую для возврата значения слота. Если слот является синонимом, он будет преобразовывать синоним в значение канонического слота. Вот код, который у меня есть сейчас:

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();

Я пытаюсь сократить // пример, где я могу просто напечатать это:

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();

Конечно, со вторым слотом NameName затенено, потому что это неправильный подход. Кто-нибудь знает, как я могу пересмотреть это, где я могу использовать:

let category = slotHelper.slotValue(category);

Я пытаюсь обобщить эту функцию, чтобы я мог использовать ее для всех своих слотов в будущем. Это облегчит работу с моим кодом ... вместо того, чтобы всегда вводить:

let category = slotHelper.slotValue(handlerInput.requestEnvelope.request.intent.slots.category);

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

Я исправил это сам.Мне пришлось поставить:

let categories = handlerInput.requestEnvelope.request.intent.slots.category;

и

let category = slotHelper.slotValue(categories);

В моем index.js (основной файл) вместо вспомогательной функции, потому что index.js использует ask-sdk для сборкиответы.Модуль, который я создал, не имел такой возможности.

0 голосов
/ 29 мая 2019

Используйте эту функцию , так как вы ищете помощника

0 голосов
/ 24 мая 2019

Одним из предложений, которое может помочь устранить большую часть введенного шаблона, проверив, существует ли ваш массив resolutionsPerAuthority, можно, используя метод Лодаша head:


const resolution = _.head(slot.resolutions.resolutionsPerAuthority);

_.head может обрабатывать пустой или пустой ввод массива, так что это должно помочь уменьшить большую часть когнитивных издержек вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...