Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWS Lambda Node.js在承诺内执行this.emit_Javascript_Promise_Aws Lambda_Alexa_Alexa Skills Kit - Fatal编程技术网

Javascript AWS Lambda Node.js在承诺内执行this.emit

Javascript AWS Lambda Node.js在承诺内执行this.emit,javascript,promise,aws-lambda,alexa,alexa-skills-kit,Javascript,Promise,Aws Lambda,Alexa,Alexa Skills Kit,我最近一直在使用node.js在Lamda内部处理Alexa。我必须实现承诺以确保请求以正确的顺序发生,并等待DB查询完成。我确实做到了这一点,但现在我无法从承诺中执行任何“this.emit”语句,可能是因为承诺结构出于自身目的使用了“this” 任何帮助都将不胜感激!这与以下线程非常相似: 我会在那里发表评论,但没有代表,DOH!无论如何,这是代码。emit语句位于底部附近。提前谢谢 'LaunchRequest': function() { var accessToken

我最近一直在使用node.js在Lamda内部处理Alexa。我必须实现承诺以确保请求以正确的顺序发生,并等待DB查询完成。我确实做到了这一点,但现在我无法从承诺中执行任何“this.emit”语句,可能是因为承诺结构出于自身目的使用了“this”

任何帮助都将不胜感激!这与以下线程非常相似:

我会在那里发表评论,但没有代表,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!  ');
    }
},

保留有关此的参考,以供以后使用:

const that = this; // at the top

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