执行不等待AWS Lambda

时间:2017-01-20 15:11:45

标签: node.js typescript aws-lambda

我正在尝试在AWS Lambda中使用promises并遇到一些麻烦。我正在使用typescript / nodejs;见下面的代码

export function handler(event: any, context: any, callback: Function){

    testFunction().then(data => callback(null, "success from promise"));
    callback(null, "success");
}   

export function testFunction(){
    return new Promise((resolve, reject) => {
        setTimeout(() => resolve("data"), 5000);
    });
}

当我运行代码时,我得到的是“成功回调”,而不是“承诺的成功”。我在这里做错了吗?

1 个答案:

答案 0 :(得分:7)

您实际上是在两次调用回调:一次在第四行"success"上,一次在承诺结算之后。我认为lambda基本上会忽略第二个回调(实际上是你代码中的第一个回调)。

你只能删除另一个电话:

export function handler(event: any, context: any, callback: Function){
    testFunction().then(data => callback(null, "success from promise"));
}

注意:回调仅受Node 4.3支持。它也是可选的。如果要将数据显式传递回调用者,则只需使用它。否则,一旦事件循环为空,它将自动被调用,在这种情况下将在promise解析后发生。

如果希望lambda函数在调用context.callbackWaitsForEmptyEventLoop = false时立即结束而不是等待事件循环完成,也可以更改callback的设置。但是,很可能你不会想要这样做。