节点GET请求在Alexa Skill运行之前完成。

时间:2017-04-24 01:58:49

标签: node.js get

我正在编写一个Alexa技能,可以对Google日历进行API调用,但我的GET请求无效。

var request = require('request');
console.log("Before requests");

request(getUrl, function (error, response, body) {
    console.log('error:', error);  
    console.log('statusCode:', response && response.statusCode);  
    console.log('body:', body);  
});

我使用request进行http调用,这段代码只是从github page复制,但没有任何内容记录到控制台,所以我不确定如何调试出错的地方。使用像http.get(options, callback)这样的其他方法产生了相同的结果 - 回调中的任何console.log()都不会被执行。有没有人有任何见解?谢谢!

-

其他一些事情 - 我的console.log("Before requests");显示,而我的getUrl可能没有正确的api密钥来发出请求,但它仍然应该返回错误而不是根本不工作。

此代码正在通过Amazon Lambda函数(AWS)运行,并且我通过AWS Cloudwatch查看日志。似乎如果我在我的终端node index.js中运行我的代码,请求就会很好。

-

console.log(request);输出:

jar: [Function],
      [ 'accept',
        'accept-charset',
        'accept-encoding',
        'accept-language',
        'accept-ranges',
        'cache-control',
        'content-encoding',
        'content-language',
        'content-location',
        'content-md5',
        'content-range',
        'content-type',
        'connection',
        'date',
        'expect',
        'max-forwards',
        'pragma',
        'referer',
        'te',
        'user-agent',
        'via' ],
     defaultProxyHeaderExclusiveList: [ 'proxy-authorization' ] },
  initParams: [Function: initParams],
  debug: [Getter/Setter]

编辑:

我所要做的只是将我的要求包含在一个承诺中,事后来看,这对我来说是显而易见的。 它是这样的:

var request = require('request');
console.log("Before requests");

return new Promise((res,rej) => {

    // getUrl is the the url and returns the data when entered into my browser            
    request(getUrl, function (error, response, body) {
        resolve(body);
    });
});

2 个答案:

答案 0 :(得分:3)

想出来 - 在进行API调用后,我直接转到this.emit(:tell, ".....");,有效地完成了程序,然后才允许API响应返回。我必须将我的API调用包装在一个承诺中,以确保它在告诉Alexa响应之前运行。

答案 1 :(得分:0)

这可行吗?

var options = {
    url: $link, //paste your link here
    method: 'GET'//or POST or whatever you want
};
request(options, function(error, response, body) {
    console.log(body);
});