使用嵌套的async.forEachSeries和async.waterfall控制Lambda Node.js代码的排序

达娜

我在Lambda中运行着一部分Alexa技能,可以将文字发送给玩家。我正在使用async.waterfall来控制调出dynamodb表的顺序,以获取该播放器的正确ARN(将文本发送到的位置),然后再通过AWS SNS发布SMS。如果playersToReceive []中只有1个玩家,则它起作用。但是我需要它可以为多个玩家使用。为此,我将async.waterfall嵌套在async.forEachSeries中(也尝试了forEach),但是回调结构错误。我认为我需要运用这个答案的逻辑,但是我对其中的许多问题还是陌生的。

        async.forEachSeries(    playersToReceive, // array of items             
            function(receivingPlayer, callback){                
                async.waterfall([                   
                    function (callback) {
                        session.attributes.phoneKey = receivingPlayer;
                        callback(null);
                    },                      
                    function (callback) {                   
                        playerStorage.loadPlayer(session, function (newLoadedPlayer) {
                            if (newLoadedPlayer == 'playerNotFound' || newLoadedPlayer == 'errorLoadingPlayer') {
                                problems = true; // set problems flag for later
                                callback(null);
                            } else {
                                var ARNtoSend = newLoadedPlayer.data.TopicARN.S;
                                callback(null, ARNtoSend);
                            };
                        })
                    },                              
                    function (ARNtoSend, callback) {
                        playerSMS.publishSMS(ARNtoSend, textToSend, function (success) {
                            if (success == false) {problems = true}; // set problems flag for later
                            callback(null);
                        })                                                      
                    }                                                       
                ], function (err, result) {
                    if (err) console.log(err, "SMS text had a problem sending.");
                    if (!err) console.log(null, "SMS text was successfully sent.");
                });                                                                                 
                callback();
            },          
            function(err){
                // All tasks are now complete               
                speechText = 'OK, text sent.';
                if (problems == true) {
                    speechText += ' . But there was a problem sending it to some players.'
                }
                response.tell(speechText);                                                                                                                      
            }
        );
达娜

我知道了-外部回调需要放在瀑布的关闭函数内部。做出更改后,它可以工作:

            async.forEachSeries(    playersToReceive, // array of items 

            function(receivingPlayer, callback){

                async.waterfall([

                    function (callback) {
                        session.attributes.phoneKey = receivingPlayer;
                        callback(null);
                    },

                    function (callback) {                   
                        playerStorage.loadPlayer(session, function (newLoadedPlayer) {
                            if (newLoadedPlayer == 'playerNotFound' || newLoadedPlayer == 'errorLoadingPlayer') {
                                problems = true; // set problems flag for later
                                callback(null);
                            } else {
                                var ARNtoSend = newLoadedPlayer.data.TopicARN.S;
                                callback(null, ARNtoSend);
                            };
                        })
                    },

                    function (ARNtoSend, callback) {
                        playerSMS.publishSMS(ARNtoSend, textToSend, function (success) {
                            if (success == false) {problems = true}; // set problems flag for later
                            callback(null);
                        })                                                      
                    }       


                ], function (err, result) {
                    if (err) console.log(err, "SMS text had a problem sending.");
                    if (!err) console.log(null, "SMS text was successfully sent.");
                    callback();
                });                     

            },          

            function(err){
                // All tasks are now complete               
                speechText = 'OK, text sent.';
                if (problems == true) {
                    speechText += ' . But there was a problem sending it to some players.'
                }
                response.tell(speechText);                                                                                                                      
            }
        );  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Node.js,Async,Waterfall,Each和MySQL同步控制流

来自分类Dev

在Node.js中将Async与Waterfall和Recursion结合使用

来自分类Dev

node.js嵌套async.eachSeries

来自分类Dev

关于node.js中async.waterfall的问题

来自分类Dev

关于node.js中async.waterfall的问题

来自分类Dev

如何在async.waterfall Node.js中循环

来自分类Dev

使用async.forEach和异步操作的Node.js

来自分类Dev

使用 Node js Await/Async 函数

来自分类Dev

如何使用 async.js 简化 Node.js 中的回调代码

来自分类Dev

在 Node 和 AWS Lambda 中使用 Async & Promises 通过 FTP 下载 txt 文件

来自分类Dev

Node.js,Mongo async.js插入和查询

来自分类Dev

使用node.js和async.js:系列执行顺序错误?

来自分类Dev

使用Node.js和async.queue将大型CSV插入MongoDB

来自分类Dev

无法使用 mongoose、node.js、express 和 async 函数更新文档数据

来自分类Dev

如何在 Node.js 中使用“async/await”和“promises”进行同步执行?

来自分类Dev

async.each嵌套在async.waterfall中

来自分类Dev

Node.JS中的ASYNC

来自分类Dev

在Node.js中使用async-await和promises时无法按预期顺序获得结果

来自分类Dev

使用Node.js和Mongoose更新嵌套的子文档

来自分类Dev

使用MySQL的Node.js原型和嵌套回调

来自分类Dev

使用@Async嵌套@Transactional方法

来自分类Dev

Node.js中JavaScript / TypeScript中的Async / Await控制流

来自分类Dev

对jquery和node.js使用相同的代码库

来自分类Dev

可以在async.parallel中使用async.waterfall吗?

来自分类Dev

了解Node.JS async.parallel

来自分类Dev

Node.js中的async / await替换

来自分类Dev

node.js中的async.eachSeries

来自分类Dev

.net中的Node.js与Async / await

来自分类Dev

Node.js:async.map变慢

Related 相关文章

热门标签

归档