在异步 lambda 函数中被忽略的函数
functions being ignored inside async lambda function
我正在创建一个系统,该系统使用 API 检查玩家数据,然后更新到我的 DynamoDB,但似乎它在中途停止了?因为 Let's scan our players & update stats!
从未显示在我的日志中?
exports.handler = async (event, context) => {
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'games',
FilterExpression:'updated_at = :updated_at',
ExpressionAttributeValues: {
":updated_at": 0,
}
};
var rows = await documentClient.scan(params).promise();
let gameAPI = new GameAPI();
await gameAPI.login().then(function() {
console.log("We have logged into our game!");
rows.Items.forEach(function(match) {
console.log("Let's look at our match! " + match.id);
var player_params = {
TableName: 'players',
FilterExpression:'match_id = :match_id',
ExpressionAttributeValues: {
":match_id": match.id,
}
};
documentClient.scan(player_params).promise().then(row => {
console.log("Let's scan our players & update stats!");
});
});
});
};
我假设这与我的 async
& await
函数有关?有人能给我指出正确的方向吗?
您正在将 await
与 then
混合使用。
试试这个:
exports.handler = async (event, context) => {
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'games',
FilterExpression:'updated_at = :updated_at',
ExpressionAttributeValues: {
":updated_at": 0,
}
};
var rows = await documentClient.scan(params).promise();
let gameAPI = new GameAPI();
await gameAPI.login();
console.log("We have logged into our game!");
for (let match of rows.Items) {
console.log("Let's look at our match! " + match.id);
var player_params = {
TableName: 'players',
FilterExpression:'match_id = :match_id',
ExpressionAttributeValues: {
":match_id": match.id,
}
};
let row = await documentClient.scan(player_params).promise();
console.log("Let's scan our players & update stats!");
}
};
then
的工作方式是基于回调的:
documentClient.scan(params).promise().then((rows) => {
// do something with the rows
});
虽然 await
/ async
的工作原理是消除回调并使您的代码看起来同步且更具可读性。
const rows = await documentClient.scan(params).promise();
// do something with the rows
我正在创建一个系统,该系统使用 API 检查玩家数据,然后更新到我的 DynamoDB,但似乎它在中途停止了?因为 Let's scan our players & update stats!
从未显示在我的日志中?
exports.handler = async (event, context) => {
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'games',
FilterExpression:'updated_at = :updated_at',
ExpressionAttributeValues: {
":updated_at": 0,
}
};
var rows = await documentClient.scan(params).promise();
let gameAPI = new GameAPI();
await gameAPI.login().then(function() {
console.log("We have logged into our game!");
rows.Items.forEach(function(match) {
console.log("Let's look at our match! " + match.id);
var player_params = {
TableName: 'players',
FilterExpression:'match_id = :match_id',
ExpressionAttributeValues: {
":match_id": match.id,
}
};
documentClient.scan(player_params).promise().then(row => {
console.log("Let's scan our players & update stats!");
});
});
});
};
我假设这与我的 async
& await
函数有关?有人能给我指出正确的方向吗?
您正在将 await
与 then
混合使用。
试试这个:
exports.handler = async (event, context) => {
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'games',
FilterExpression:'updated_at = :updated_at',
ExpressionAttributeValues: {
":updated_at": 0,
}
};
var rows = await documentClient.scan(params).promise();
let gameAPI = new GameAPI();
await gameAPI.login();
console.log("We have logged into our game!");
for (let match of rows.Items) {
console.log("Let's look at our match! " + match.id);
var player_params = {
TableName: 'players',
FilterExpression:'match_id = :match_id',
ExpressionAttributeValues: {
":match_id": match.id,
}
};
let row = await documentClient.scan(player_params).promise();
console.log("Let's scan our players & update stats!");
}
};
then
的工作方式是基于回调的:
documentClient.scan(params).promise().then((rows) => {
// do something with the rows
});
虽然 await
/ async
的工作原理是消除回调并使您的代码看起来同步且更具可读性。
const rows = await documentClient.scan(params).promise();
// do something with the rows