Прежде всего ваша функция test
не возвращает обещание.Я не знаю, является ли это преднамеренным, и вы просто сокращаете код вызова API, чтобы сделать его проще, но он должен вернуть обещание, если вы хотите использовать then
для него.
Если он возвращает обещание вВаш полный пример, то, что вы упускаете, это добавление возврата до test
.Также вы должны вернуть handlerInput
из вашего обещания.Код должен выглядеть следующим образом (я удалю часть кода, который не имеет значения):
const NumberFactIntentHandler = {
canHandle(handlerInput) {},
handle(handlerInput) {
const repromptOutput = " Would you like another fact?";
const URL = "http://numbersapi.com";
return test(URL, theNumber).then(function (data) {
return handlerInput.responseBuilder
.speak("Test Data")
.reprompt(repromptOutput)
}).catch(function (data) {
return handlerInput.responseBuilder
.speak(`I wasn't able to find a fact for ${theNumber}` )
.reprompt(repromptOutput)
});
}
};
Теперь вы можете задаться вопросом, зачем вам эти return
.Это связано с тем, что функции JS неявно возвращают undefined
, поэтому в этом случае вы должны явно указать, что должно быть возвращено функцией handle
.То же самое относится и к обещанию.