在给定所有调用是异步的情况下,如何在lambda中构建顺序AWS服务调用?

use*_*110 16 asynchronous amazon-web-services node.js aws-lambda

我来自java背景,所以对于Lambda需要一些Javascript约定的新手.

我有一个lambda函数,它可以按特定顺序执行多个AWS任务,具体取决于前一个任务的结果.

鉴于每个任务都异步报告其结果,我想知道是否正确的方法确保它们都以正确的顺序发生,并且一个操作的结果可用于调用下一个函数.

看起来我必须在前一个函数的回调函数中调用每个函数,但似乎会有某种深度嵌套,并且想知道这是否是正确的方法.

例如,在这些函数上需要一个DynamoDB getItem,然后调用SNS获取端点,然后是SNS调用以发送消息,然后是DynamoDB写入.

什么是在lambda javascript中做到这一点的正确方法,考虑到所有异步性?

Roy*_*yHB 2

我不知道 Lambda,但您应该研究节点异步库作为对异步函数进行排序的方法。

异步使我的生活变得更加轻松,我的代码更加有序,没有您在问题中提到的深层嵌套问题。

典型的异步代码可能如下所示:

async.waterfall([
    function doTheFirstThing(callback) {
         db.somecollection.find({}).toArray(callback);
    },
    function useresult(dbFindResult, callback) {
         do some other stuff  (could be synch or async)
         etc etc etc
         callback(null);
],
function (err) {
    //this last function runs anytime any callback has an error, or if no error
    // then when the last function in the array above invokes callback.
    if (err) { sendForTheCodeDoctor(); }
});
Run Code Online (Sandbox Code Playgroud)

查看上面链接中的异步 doco。有许多有用的函数用于串行、并行、瀑布等。异步得到积极维护并且看起来非常可靠。

祝你好运!