AWS:Alexa 技能模板中的 intentHandler.call() 取消了前面的函数调用
AWS: intentHandler.call() in Alexa skills template cancels out preceding function call
我正在尝试从 Lambda 函数发布到 IoT 主题,该函数由 Alexa 技能触发。在 Lambda 函数中,我正在执行此 IoT 发布:
var params = {
topic: 'testTopic',
payload: new Buffer('test message'),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log('ERR: ', err); // an error occurred
else if (data) console.log('DATA: ', data); // successful response
});
如果我 运行 在 Lambda 函数中使用此代码(并且仅此代码),它可以正常工作。但是,如果我将参数和发布函数放在 Alexa Skill 模板的 onIntent 函数中,并将其放在新的 Lambda 函数中,它就不起作用。 (两个 Lambda 函数具有相同的配置和策略。)
如果我注释掉 intentHandler.call(),那么 iotData.publish() 会执行 运行,所以看起来 intentHandler 调用由于某种我不明白的原因正在取消它.
onIntent: function (intentRequest, session, response) {
var intent = intentRequest.intent,
intentName = intentRequest.intent.name,
intentHandler = this.intentHandlers[intentName];
if (intentHandler) {
console.log('dispatch intent = ' + intentName);
var params = {
topic: 'testTopic',
payload: new Buffer('test message'),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log('ERR: ', err); // an error occurred
else if (data) console.log('DATA: ', data); // successful response
});
intentHandler.call(this, intent, session, response);
} else {
throw 'Unsupported intent = ' + intentName;
}
}
这似乎与 Lambda 函数上下文有关。 intentHandler.call()
调用相关意图,后者又调用 context.succeed()
。我假设这意味着 Lambda 函数在可以执行 iotData.publish()
调用之前完成 运行,因为当我像这样将 intentHandler.call()
放入 iotData.publish()
的回调中时,一切工作正常:
onIntent: function (intentRequest, session, response) {
var intent = intentRequest.intent,
intentName = intentRequest.intent.name,
intentHandler = this.intentHandlers[intentName];
if (intentHandler) {
console.log('dispatch intent = ' + intentName);
var params = {
topic: 'signals',
payload: new Buffer(intentName),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
console.log(data); // successful response
intentHandler.call(this, intent, session, response);
}
});
} else {
throw 'Unsupported intent = ' + intentName;
}
}
我正在尝试从 Lambda 函数发布到 IoT 主题,该函数由 Alexa 技能触发。在 Lambda 函数中,我正在执行此 IoT 发布:
var params = {
topic: 'testTopic',
payload: new Buffer('test message'),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log('ERR: ', err); // an error occurred
else if (data) console.log('DATA: ', data); // successful response
});
如果我 运行 在 Lambda 函数中使用此代码(并且仅此代码),它可以正常工作。但是,如果我将参数和发布函数放在 Alexa Skill 模板的 onIntent 函数中,并将其放在新的 Lambda 函数中,它就不起作用。 (两个 Lambda 函数具有相同的配置和策略。)
如果我注释掉 intentHandler.call(),那么 iotData.publish() 会执行 运行,所以看起来 intentHandler 调用由于某种我不明白的原因正在取消它.
onIntent: function (intentRequest, session, response) {
var intent = intentRequest.intent,
intentName = intentRequest.intent.name,
intentHandler = this.intentHandlers[intentName];
if (intentHandler) {
console.log('dispatch intent = ' + intentName);
var params = {
topic: 'testTopic',
payload: new Buffer('test message'),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log('ERR: ', err); // an error occurred
else if (data) console.log('DATA: ', data); // successful response
});
intentHandler.call(this, intent, session, response);
} else {
throw 'Unsupported intent = ' + intentName;
}
}
这似乎与 Lambda 函数上下文有关。 intentHandler.call()
调用相关意图,后者又调用 context.succeed()
。我假设这意味着 Lambda 函数在可以执行 iotData.publish()
调用之前完成 运行,因为当我像这样将 intentHandler.call()
放入 iotData.publish()
的回调中时,一切工作正常:
onIntent: function (intentRequest, session, response) {
var intent = intentRequest.intent,
intentName = intentRequest.intent.name,
intentHandler = this.intentHandlers[intentName];
if (intentHandler) {
console.log('dispatch intent = ' + intentName);
var params = {
topic: 'signals',
payload: new Buffer(intentName),
qos: 1
};
iotData.publish(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
console.log(data); // successful response
intentHandler.call(this, intent, session, response);
}
});
} else {
throw 'Unsupported intent = ' + intentName;
}
}