功能ical.fromURL无效AWS Lambda

问题描述 投票:0回答:1

我正在使用Alexa技能可以使用的Lambda函数。我想要的只是简单的东西,可以读取事件并将信息发送回用户。为此,我使用npm库ical.js https://www.npmjs.com/package/ical和函数ical.fromURL(url,options,function(err,data){}),但问题是函数永远不会执行。我有以下代码:

var Alexa = require("alexa-sdk");
var ical = require("ical");
var test = "This is a simple test 1";

exports.handler = function(event, context) {
   var alexa = Alexa.handler(event, context);
   alexa.registerHandlers(handlers);
   alexa.execute();
};

var handlers = {
   'LaunchRequest':function() {
       console.log(test);
       ical.fromURL('http://lanyrd.com/topics/nodejs/nodejs.ics', {}, function(err, data) {
           test = "Nothing changes";
       });
       console.log(test);
       test.emit(':tell', 'I am done');
    }
};

当我在ASK CLI output on cloudwatch中“询问模拟-l en-US -t'开始日历读取'时,这是我从可以观看的输出,因为您可以看到测试文本没有改变,并且如果它可以工作在函数之外(错误,数据){}。我不相信在日历中阅读有任何问题,因为链接http://lanyrd.com/topics/nodejs/nodejs.ics下载了一个工作的ics文件。如果我在https://npm.runkit.com/ical工具中尝试它,该功能会激活。所以我不确定我做错了什么。此外,技能工作在alexa技能套件开发中测试时给出响应。

node.js amazon-web-services aws-lambda icalendar
1个回答
0
投票

你输错了test.emit(':tell', 'I am done');而不是this.emit(':tell', 'I am done');

此外,您的代码不会从网址返回数据,因为this.emit将首先返回而不是您的回调函数。为了返回数据,您需要将this.emit放在ical.fromURL的回调函数中。

var handlers = {
   'LaunchRequest':function() {
       console.log(test);
       ical.fromURL('http://lanyrd.com/topics/nodejs/nodejs.ics', {}, (err, data) => {
           test = "Nothing changes";

           console.log(test);
           // you can edit the response here base on the data you receive.
           this.emit(':tell', `I am done: ${test}`);
       });
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.