我正在尝试在导出处理程序中使用async.waterfall
,并依次调用函数。功能之一与MQTT消息发布有关。在调用函数时,但是在调用MQTT函数时,它只是停止而不调用require('MQTT')。
exports.handler = function(event, context) {
var async = require('async');
async.waterfall([
function(callback) {
retrieveEmailId(apiAccessToken,callback)
},
function(emailId, callback) {
retrieveDeviceDetails(callback)
},
function(deviceDetail, callback) {
publishMsg(callback)
}
], function(err, result) {
if (err) console.log('Error :: \n' + err);
});
}
function retrieveEmailId(accessToken, callback) {
var getEmailFromAlexaProfileObj = require('./GetEmailFromAlexaProfile');
getEmailFromAlexaProfileObj.doIt(accessToken, function(returnVal) {
console.log(returnVal);
callback(null, returnVal)
});
}
function retrieveDeviceDetails(callback) {
var getDevcieDetailsObj = require('./GetDevcieDetails');
getDeviceDetailsObj.doIt(null, function(returnVal) {
console.log(returnVal);
callback(null, returnVal)
});
}
function publishMsg() {
var mqtt = require('mqtt');
var options = {
clientId: "xxx",
username: "yyy",
password: "zzz",
clean: true
};
var client = mqtt.connect("mqtt://xxx.com", options)
client.on("connect", function () {
client.publish('xxx/yyy/L1', "1", options);
client.end();
});
}
答案 0 :(得分:0)
您是否尝试过使用“ lambda-local”在本地运行代码?那一连串的呼叫能否与最后一个MQTT一起使用?在lambda中调用“ require('mqtt')”时,您注意到了什么?
答案 1 :(得分:0)
如果require变量在export.handler之前完成,问题就解决了。
例如。...
var AWS = require('aws-sdk');
var async = require('async');
exports.handler =函数(事件,上下文){
... }