Node.js 需要使用Lambda和node Js发布到IoT主题的帮助吗
我试图用亚马逊Alexa、IoT和Lambda控制我的覆盆子。 到目前为止,我的工作是:Node.js 需要使用Lambda和node Js发布到IoT主题的帮助吗,node.js,aws-lambda,mqtt,iot,aws-iot,Node.js,Aws Lambda,Mqtt,Iot,Aws Iot,我试图用亚马逊Alexa、IoT和Lambda控制我的覆盆子。 到目前为止,我的工作是: 将raspberry设置为物联网设备,并能够发布和订阅主题(测试人员使用物联网客户端) 设置测试lambda node.js脚本 在我的lambda脚本中设置触发意图的测试Alexa技能 下面是我的node.js脚本中的意图处理: switch(event.request.intent.name) { case "testone": var config = {};
- 将raspberry设置为物联网设备,并能够发布和订阅主题(测试人员使用物联网客户端)
- 设置测试lambda node.js脚本
- 在我的lambda脚本中设置触发意图的测试Alexa技能
switch(event.request.intent.name) {
case "testone":
var config = {};
config.IOT_BROKER_ENDPOINT = "restAPILinkFromIoT".toLowerCase();
config.IOT_BROKER_REGION = "us-east-1";
//Loading AWS SDK libraries
var AWS = require('aws-sdk');
AWS.config.region = config.IOT_BROKER_REGION;
var iotData = new AWS.IotData({endpoint: config.IOT_BROKER_ENDPOINT});
var topic = "/test";
var output = "test output without publish"
var params = {
topic: topic,
payload: "foo bar baz",
qos:0
};
iotData.publish(params, (err, data) => {
if (!err){
output = "publish without error"
this.emit(':tell', tell);
} else {
output = err
}
});
context.succeed(
generateResponse(
buildSpeechletResponse(output, true),
{}
)
)
break;
...
基本上,脚本应该返回“无错误发布”或错误消息。问题是它总是返回“测试输出而不发布”。似乎从未触发发布函数(或至少回调函数)。我也没有在主题中看到任何消息
我做错什么了吗
提前谢谢 这部分:
iotData.publish(params, (err, data) => {
if (!err){
output = "publish without error"
this.emit(':tell', tell);
} else {
output = err
}
});
是一个异步方法调用。iotData.publish()方法将立即返回。然后,在异步调用完成后的某个时间,将执行带有if(!err).
代码块的匿名回调函数
这意味着这一部分:
context.succeed(
generateResponse(
buildSpeechletResponse(output, true),
{}
)
)
在IoTpublish()
调用完成之前,以及在输出
变量分配任何内容之前调用
要解决此问题,可以将代码移动到回调中:
iotData.publish(params, (err, data) => {
if (!err){
context.succeed(generateResponse(
buildSpeechletResponse("publish without error", true),
{});
)
} else {
context.succeed(generateResponse(
buildSpeechletResponse(err, true),
{});
}
});
作为旁注,我真的不建议同时学习NodeJS、AWS Lambda和IoT。如果您需要在学习Lambda和其他AWS的同时学习一种语言,我建议您使用Python,因为您不必在Python中处理这些异步回调问题