使用Alexa技能进行回调

时间:2018-11-06 16:24:15

标签: javascript node.js alexa

我的Alexa技能有问题。代码是这样的:

 var options = { method: 'GET',
      url: 'http://98f8cd20.ngrok.io/products',
      headers: 
       { 'Postman-Token': 'f4e1b171-aae5-46d5-baeb-7903978cf10c',
         'cache-control': 'no-cache',
         'Content-Type': 'application/json' } };


    const callExternalApi = (callback) => {
     request(options, (error, response, body) => {
      if (error) {
          return callback(error)
      }
            const data = JSON.parse(body);
            return callback(data)

    })
    } module.exports.callApi = callExternalApi

apicaller.callApi(function(antwort){
     var test = antwort;

    console.log(test)
})

当我在Sublime编辑器中对其进行测试时,根本没有问题,但是当我使用Alexa Skill对其进行测试时,我得到了一个错误。那里的代码如下:

 'AllCarsIntent': function () {

        apicaller.callApi(function(antwort){
         var test = antwort.count;

          this.response.speak(test).listen("Tell me what you think is the world's most popular sport.")
          this.emit(':responseReady')


         //.listen("Tell me what you think is the world's most popular sport.")
         //this.emit(':responseReady')
     });

我认为回调中的“ this”有问题。这是我的错误的样子:

  

START RequestId:4064b501-e1b2-11e8-b227-bb50cdd263c7版本:$ LATEST   2018-11-06T10:53:53.718Z 4064b501-e1b2-11e8-b227-bb50cdd263c7警告:   未设置应用程序ID   2018-11-06T10:53:54.118Z 4064b501-e1b2-11e8-b227-bb50cdd263c7 TypeError:   无法读取未定义的属性“响应”       在/var/task/index.js:29:12       在Request.request [作为_callback](/var/task/data.js:19:12)       在Request.self.callback(/var/task/node_modules/request/request.js:185:22)       在emitTwo(events.js:126:13)       在Request.emit(events.js:214:7)       应要求。 (/var/task/node_modules/request/request.js:1161:10)       在emitOne上(events.js:116:13)       在Request.emit(events.js:211:7)       在IncomingMessage。 (/var/task/node_modules/request/request.js:1083:12)       位于Object.onceWrapper(events.js:313:30)END RequestId:4064b501-e1b2-11e8-b227-bb50cdd263c7 REPORT RequestId:   4064b501-e1b2-11e8-b227-bb50cdd263c7持续时间:440.67 ms已计费   持续时间:500 ms内存大小:128 MB使用的最大内存:44 MB
  RequestId:4064b501-e1b2-11e8-b227-bb50cdd263c7进程在退出之前   完成请求

任何人都知道我的错误是什么?我将衷心感谢您的帮助! 预先谢谢你!

1 个答案:

答案 0 :(得分:0)

一旦在API调用函数中,上下文就会丢失。 this 不再引用外部上下文。在 callApi 函数外部定义变量 test ,然后在 calllApi 函数内部分配值,然后执行说话 emit 也在 callApi 函数之外。您必须等待API调用的数据返回,因此您需要使用 async / await 和节点v8 + Here's是此类API调用的示例,但使用的是最新版本的ASK SDK(请迁移到此版本,不建议使用您使用的SDK)。