AWS Lambda Node.js在promise

时间:2018-01-11 15:55:31

标签: javascript promise aws-lambda alexa alexa-skills-kit

我最近一直在使用node.js在Lamda内部工作。我必须实现promises以确保请求以正确的顺序发生并等待数据库查询完成。我确实有这个工作,但是现在我无法在promise中执行任何“this.emit”语句,这可能是由于使用“this”的promise结构用于它自己的目的。

任何帮助将不胜感激!这与以下主题非常相似:AWS Lambda Node.js execute this.emit after async HTTP request completes

我会在那里评论,但没有代表,DOH!无论如何这里是代码。 emit语句接近底部。提前谢谢!

    'LaunchRequest': function() {
    var accessToken = this.event.session.user.accessToken;
    // Check for User Data in Session Attributes
    if (accessToken) {
        // Get User Details from Login with Amazon
        AmazonAPI('https://api.amazon.com/user/profile?access_token=', accessToken, 'GET')
            .then(function(userDetails) {
                console.log(userDetails);
                return (userDetails);
            })
            .then(function(userDetails) {
                console.log('STEP 2: Starting DB Lookup');
                var email = userDetails.email;
                return userCheck(email);
            })
            .then(function(userDetails) {
                var noAccount = '{"Items":[],"Count":0,"ScannedCount":0}';
                var existString = JSON.stringify(userDetails);
                var activeState = existString.includes("ACTIVE");
                var linkState = existString.includes("linkComplete");
                console.log(linkState);
                var truth = true;
                if (existString == noAccount) {
                    return AmazonAPITwo('https://api.amazon.com/user/profile?access_token=', accessToken, 'GET')
                        .then(function(userDetails) {
                            console.log(userDetails);
                            var name = userDetails.name;
                            var email = userDetails.email;
                            var postal_code = userDetails.postal_code;
                            var amazonId = userDetails.user_id;
                            var currentState = userDetails.state;
                            var state = "linkComplete";
                            return userCreate(accessToken, email, name, amazonId, postal_code, state);
                        })
                        .then(function() {
                            console.log('Staring PhaseOne Questions');
                            this.emit('phaseOne');

                        });
                } else if (activeState == truth) {
                    console.log('Saying Fact');
                    this.emit('giveFactIntent');
                } else if (linkState == truth) {
                    console.log('Staring PhaseOne Questions');
                    this.emit('phaseOne');
                }
            })
            .catch(function(err) {
                console.log('Caught Error:', err);
            });
    } else {
        // Account Not Linked
        this.emit(':tellWithLinkAccountCard', 'Welcome!  ');
    }
},

1 个答案:

答案 0 :(得分:1)

保留对此的引用以便稍后使用:

const that = this; // at the top

// later on in nested function
that.emit();