Javascript AWS Lambda Node.js在承诺内执行this.emit
我最近一直在使用node.js在Lamda内部处理Alexa。我必须实现承诺以确保请求以正确的顺序发生,并等待DB查询完成。我确实做到了这一点,但现在我无法从承诺中执行任何“this.emit”语句,可能是因为承诺结构出于自身目的使用了“this” 任何帮助都将不胜感激!这与以下线程非常相似: 我会在那里发表评论,但没有代表,DOH!无论如何,这是代码。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
'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();