快速路由器在发送响应之前等待条件功能



我正在使用Twilio构建一个快递应用具有。它是通过Azure部署的,但是我可以合理地确定自己已经超越了配置头痛。作为我可以制作这项工作和一些风味的早期测试,我正在尝试设置一个功能,以便您可以发短信为"笑话"(理想情况是不敏感的(,它将从https://发送一个随机的笑话。icanhazdadjoke.com/。如果有其他任何文字,现在基本上应该回荡它。

我感觉到这与JS异步有关,并且在回来之前的代码继续前进,因此我试图使用承诺来等待代码,但是条件性质是一种新的皱纹我。我一直在寻找答案,但似乎没有任何作用。我至少已经隔离了这个问题,因此非笑话手臂正常工作。

这是检索笑话的函数,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
    });
}
}

这是我路由器的一部分,它工作不太正确。如果我发短信不是"开玩笑",我会通过短信回响。如果我发短信"笑话",我不会收到回复短信,我会在kudu日志中看到"未定义"(从下面(,然后我看到了帖子的日志,然后我看到了函数的笑话上面运行。

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((呼叫以完全解决。

我认为这就是您想要的。请注意,我使用了async/await而不是承诺链接。

// joke.get.js
const rp = require('request-promise-native');
var options = {
    headers: {
        'Accept': 'application/json'
    }
}
async function getJoke() {
    const data = await rp('https://icanhazdadjoke.com/', options) //add in headers
    return JSON.parse(data).joke;
}

// route.js
smsRouter.route('/')
.post(async (req, res, next) => {
    const twiml = new MessagingResponse();
    async function getMsgText(request) {
      if(req.body.Body.toLowerCase() === 'joke'){
        return await getJoke();
      }
      return `You texted: ${req.body.Body}`
    }
    const msg = await getMsgText(req);
    twiml.message(msg);
    res.status(200).send(twiml.toString());
  })

ync/等待JS

最新更新