AWS Lambda函数在IntentHandler调用的函数完成之前返回

时间:2017-01-03 02:00:36

标签: javascript node.js amazon-web-services lambda aws-lambda

我正在使用AWS Lambda开发我的第一个Alexa技能。 我遇到的挑战是Lambda函数在所有同步函数运行之前完成。 我在下面使用一个例子(摘自here) 函数a()调用B()(我认为默认情况下是异步调用) 当我测试我的功能有时我只得到输出 'A已完成' 和函数返回而不执行B(),C(),D()

我从GetUpdateIntent调用A()。我读过几篇建议在回调中使用context.done()的帖子 确保回调完成。我无法遵循如何实现这一目标。 我喜欢在lambda函数完成之前完成所有的回调和异步调用。

var A = function() {
    return new Promise(function(resolve, reject) {
        var result = 'A is done'
        console.log(result)
        resolve(result);      
    })  
}

var B = function() {
    return new Promise(function(resolve, reject) {
        var result = 'B is done'

        setTimeout(function() {
            console.log(result)
            resolve(result);
        }, 2000)
        global_context.done();
    })
}

var C = function() {
    return new Promise(function(resolve, reject) {
        var result = 'C is done'
        console.log(result)
        resolve(result);
    })
}

var D = function() {
    return new Promise(function(resolve, reject) {
        var result = 'D is done'
        console.log(result)
        resolve(result);
    })
}

A()
.then(function(result) { 
    return B();
})
.then(C)
.then(D)
.then(console.log("All done"));

Example.prototype.intentHandlers = {
    GetUpdateIntent: function(intent, session, response){
        A();
  },
};

exports.handler = function(event, context) {
    var skill = new Example();
    skill.execute(event, context);
};

1 个答案:

答案 0 :(得分:1)

您无法在GetUpdateIntent功能中调用其余功能。您需要像设置示例类

之前一样将函数链接在一起