我在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] 删除。
我来说两句