Я использую лямбда-функцию AWS с NodeJS для моего навыка alexa.Но я застрял в использовании асинхронной функции.
Вот требование
- При запуске асинхронная функция
function1
вызывается - . После завершения
function1
результат передается в асинхронный режим.function2
. - Результат
function2
должен быть передан пользователю
Так что я пытаюсь решить эту проблему, используя Promise
цепочку.Ниже мой псевдокод
function function1() {
return new Promise((resolve, reject) => {
//some async operation
if (result1) {
resolve(result1);
} else {
reject(error);
}
});
}
function function2(result1) {
return new Promise((resolve, reject) => {
//some async operation
if (result2) {
resolve(result2);
} else {
reject(error);
}
});
}
const mainHandler = {
'LaunchRequest': function () {
function1()
.then(result1 => function2(result1))
.then(result2 => {
//succcess
this.response.cardRenderer(result2);
this.response.speak(result2);
this.response.listen(config.HELP_REPROMPT);
this.emit(':responseReady');
}).catch(err => {
//error
this.response.cardRenderer(err);
this.response.speak(err);
this.response.listen(config.HELP_REPROMPT);
this.emit(':responseReady');
});
},
};
Теперь проблема, с которой я сталкиваюсь, заключается в том, что alexa преждевременно завершает свою работу после выполнения первой функции, не ожидая выполнения функции function2.Не уверен, что я здесь делаю не так.Любая помощь будет оценена.Заранее спасибо.
Примечание: Если есть только одна асинхронная функция, то она работает нормально.т.е. код ниже работает нормально.
const mainHandler = {
'LaunchRequest': function () {
function1()
.then(result1 => {
//succcess
this.response.cardRenderer(result1);
this.response.speak(result1);
this.response.listen(config.HELP_REPROMPT);
this.emit(':responseReady');
})
.catch(err => {
//error
this.response.cardRenderer(err);
this.response.speak(err);
this.response.listen(config.HELP_REPROMPT);
this.emit(':responseReady');
});
},
};'
Проблема, когда задействованы 2 асинхронные функции