Я создаю приложение Express, используя Twilio, чтобы позволить группе людей общаться через SMS без необходимости устанавливать приложение или иметь дело с ограничениями на групповые тексты, которые, по-видимому, есть у некоторых телефонов / операторов.Он развернут через Azure, но я уверен, что преодолел трудности с настройкой.В качестве раннего теста, который я могу сделать эту работу и для некоторого вкуса, я пытаюсь настроить функцию, чтобы вы могли текст "шутка" (в идеале без учета регистра), и он будет отправлять случайную шутку от https://icanhazdadjoke.com/. Если что-то еще отправлено в текстовом сообщении, сейчас оно должно в основном отражать его обратно.
Я чувствую, что это связано с асинхронностью js и движением кода до возвращения GET, поэтому яЯ пытаюсь использовать обещания, чтобы заставить код ждать, но условная природа - это новая морщина для меня.Я искал ответы, но, похоже, ничего не работает.Я, по крайней мере, выделил проблему, так что рука не-шутки работает правильно.
Вот функция для получения шутки, файл console.log выводит правильно:
const rp = require('request-promise-native');
var options = {
headers: {
'Accept': 'application/json'
}
}
function getJoke() {
rp('https://icanhazdadjoke.com/', options) //add in headers
.then(joke => {
theJoke = JSON.parse(joke).joke
console.log(theJoke)
return theJoke
});
}
}
Здесьэто часть моего роутера, которая работает не совсем правильно.Если я пишу что-то, что не является «шуткой», я получаю ответное эхо через SMS.Если я пишу «шутка», я не получаю ответное SMS, я вижу «undefined» в журнале Kudu (снизу), а затем я вижу журнал POST, а затем я вижу шутку из функциивыше, запустив.
smsRouter.route('/')
.post((req, res, next) => {
const twiml = new MessagingResponse();
function getMsgText(request) {
return new Promise(function(resolve, reject) {
if (req.body.Body.toLowerCase() == 'joke') {
resolve(getJoke());
}
else {
resolve('You texted: ' + req.body.Body);
}
})
}
getMsgText(req)
.then(msg => {
console.log(msg);
twiml.message(msg);
res.writeHead(200, {'Content-Type': 'text/xml'});
res.end(twiml.toString());
})
})
Как я могу сделать так, чтобы getMsgText () ждал, пока вызов getJoke () полностью разрешится, прежде чем перейти к .then?