AWS Lambda Nodejs async.waterfall не выполняет функцию MQTT - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь использовать 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();
        });         
    }

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Проблема будет решена, если переменная require задана до export.handler.

например ....

var AWS = require ('aws-sdk');
var async = require ('async');

exports.handler = функция (событие, контекст) {

....}

0 голосов
/ 21 декабря 2018

Вы пытались запустить код локально, используя "lambda-local"?Работает ли эта последовательность вызовов вместе с последней, которая является MQTT?Что вы заметили, когда вызываете «require ('mqtt')» в lambda?

...