尝试删除 api 键但得到 "await is only valid in async function"
Trying to delete api key but getting "await is only valid in async function"
我正在尝试使用 AWS SDK JS 删除 api 个密钥,但我收到此错误消息:
{
"errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: await is only valid in async function",
"stack": [
"Runtime.UserCodeSyntaxError: SyntaxError: await is only valid in async function",
" at _loadUserApp (/var/runtime/UserFunction.js:98:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:36:30)",
" at Module._compile (internal/modules/cjs/loader.js:701:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)",
" at Module.load (internal/modules/cjs/loader.js:600:32)",
" at tryModuleLoad (internal/modules/cjs/loader.js:539:12)",
" at Function.Module._load (internal/modules/cjs/loader.js:531:3)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)",
" at startup (internal/bootstrap/node.js:283:19)"
]
}
我试图创建一个删除承诺,就像我对 select 键所做的那样,但我认为在 foreach 中执行它可能是一个问题。
我的代码:
let sendPromise = null;
let params = {
includeValues: true,
limit: 500
};
let dados = null;
sendPromise = new AWS.APIGateway().getApiKeys( params ).promise();
try {
dados = await sendPromise;
} catch(err) {
console.error(err, err.stack);
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
dados.items.forEach( chave => {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
});
return criarResposta( 200, JSON.stringify( dados ) );
另外,我需要单独等待我所有的 promise 还是有等待 promise 的捆绑包的方法?
我等不及我的承诺了,因为我正在使用 lambda,但我希望我能让它们 运行 在一起
你必须创建一个异步函数才能在 Nodejs 中使用 async-await
您只需要在 forEach 函数中使用 async 关键字
let sendPromise = null;
let params = {
includeValues: true,
limit: 500
};
let dados = null;
sendPromise = new AWS.APIGateway().getApiKeys( params ).promise();
try {
dados = await sendPromise;
} catch(err) {
console.error(err, err.stack);
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
dados.items.forEach( async chave => {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
});
return criarResposta( 200, JSON.stringify( dados ) );
这里最好把forEach循环换成for循环,这样就可以使用里面的await:
...
for (const chave of dados.items) {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{"message": "Erro interno"}` );
}
}
我正在尝试使用 AWS SDK JS 删除 api 个密钥,但我收到此错误消息:
{
"errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: await is only valid in async function",
"stack": [
"Runtime.UserCodeSyntaxError: SyntaxError: await is only valid in async function",
" at _loadUserApp (/var/runtime/UserFunction.js:98:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:36:30)",
" at Module._compile (internal/modules/cjs/loader.js:701:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)",
" at Module.load (internal/modules/cjs/loader.js:600:32)",
" at tryModuleLoad (internal/modules/cjs/loader.js:539:12)",
" at Function.Module._load (internal/modules/cjs/loader.js:531:3)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)",
" at startup (internal/bootstrap/node.js:283:19)"
]
}
我试图创建一个删除承诺,就像我对 select 键所做的那样,但我认为在 foreach 中执行它可能是一个问题。
我的代码:
let sendPromise = null;
let params = {
includeValues: true,
limit: 500
};
let dados = null;
sendPromise = new AWS.APIGateway().getApiKeys( params ).promise();
try {
dados = await sendPromise;
} catch(err) {
console.error(err, err.stack);
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
dados.items.forEach( chave => {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
});
return criarResposta( 200, JSON.stringify( dados ) );
另外,我需要单独等待我所有的 promise 还是有等待 promise 的捆绑包的方法? 我等不及我的承诺了,因为我正在使用 lambda,但我希望我能让它们 运行 在一起
你必须创建一个异步函数才能在 Nodejs 中使用 async-await 您只需要在 forEach 函数中使用 async 关键字
let sendPromise = null;
let params = {
includeValues: true,
limit: 500
};
let dados = null;
sendPromise = new AWS.APIGateway().getApiKeys( params ).promise();
try {
dados = await sendPromise;
} catch(err) {
console.error(err, err.stack);
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
dados.items.forEach( async chave => {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{
"message": "Erro interno"
}` );
}
});
return criarResposta( 200, JSON.stringify( dados ) );
这里最好把forEach循环换成for循环,这样就可以使用里面的await:
...
for (const chave of dados.items) {
const paramsDeletar = {
apiKey: chave.id
};
sendPromise = new AWS.APIGateway().deleteApiKey( params ).promise();
try {
let dadosDeletar = await sendPromise;
} catch(err) {
console.error( err, err.stack );
return criarResposta( 500, `{"message": "Erro interno"}` );
}
}