У меня есть два запроса https в nodejs, первый для подтверждения того, что пользователь авторизован для доступа к данным, а второй - для возврата данных.
У меня есть консольные журналы, и я вижу, что данныеуспешно возвращается в обещании, но Алекса не будет говорить / показывать карту.В cloudwatch нет ошибок.
Я не совсем понимаю синтаксис обещания, поэтому я уверен, что упускаю что-то простое.
Я изменил синтаксис, пытаясьasync / await, и, похоже, ничего не работает.
EDITED CODE - с некоторой помощью я смог лучше выложить свой код.Теперь я получаю сообщение об ошибке в облаке: ОШИБКА: INVALID_RESPONSE, Возникла исключительная ситуация при отправке запроса к навыку.
Примечание: эта ошибка происходит, потому что сейчас я ФОРСИРУЮошибка, ака верхняя часть (если redacted.errors).
messages.NO_ACCESS в настоящее время установлено на ---- "Хм, похоже, что у вас нет доступа к этим данным."
const IntentRequest = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest';
},
handle(handlerInput) {
const { requestEnvelope, serviceClientFactory, responseBuilder } = handlerInput;
let resp, resultData;
return new Promise((resolve, reject) => {
checkAuthenticationStatus(handlerInput, function(json){
if(REDACTED.errors) {
console.log('unauthed', REDACTED.error)
reject(handlerInput.responseBuilder.speak(messages.NO_ACCESS).withSimpleCard('Unauthorized Request', messages.NO_ACCESS).getResponse());
} else if(REDACTED.noerror && REDACTED.noerror.data == 'true'){
const url = new URL(REDACTED.url);
const resp = httpsGetIntent(handlerInput, url, (theResult) => {
resultData = theResult;
console.log('resolved with ---->', d)
return resolve(handlerInput.responseBuilder.speak("The result was" + d).withSimpleCard('Hello World', d).getResponse());
})
}
})
});
},
};
Вот часть кода, гдеданные IS (resultData и d - это одно и то же и оба возвращают данные) возвращены, но она не говорит / не показывает карточку:
const IntentRequest = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest';
},
handle(handlerInput) {
const { requestEnvelope, serviceClientFactory, responseBuilder } = handlerInput;
let resp, resultData;
return new Promise((resolve, reject) => {
checkAuthenticationStatus(handlerInput, function(json){
if(REDACTED) {
reject(handlerInput.responseBuilder.speak(messages.NO_ACCESS).withSimpleCard('Unauthorized Request', messages.NO_ACCESS).getResponse())
} else if(REDACTED && REDACTED == 'true'){
const url = new URL(REDACTED);
resp = httpsGetIntent(handlerInput, url, (theResult) => {
resultData = theResult;
console.log(resultData)
}).then((d) => {
console.log(d)
resolve(handlerInput.responseBuilder.speak("The result was" + d.response.outputSpeech.text).withSimpleCard('Hello World', d.response.outputSpeech.text).getResponse());
}).catch((err) => { console.log(err)});
}
});
});
},
};