Пытается удалить ключ API, но получает сообщение «Ожидание действует только в асинхронной функции». - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь удалить ключи API, используя AWS SDK JS, но получаю следующее сообщение об ошибке:

{
    "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)"
    ]
}

Я пытался создать обещание для удаления, так же, как и длявыберите ключи, но я думаю, что это может быть проблемой сделать это внутри 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 ) );

Другое дело, нужно ли мне ждать всех моих обещаний индивидуально илиесть способ ожидания связки обещаний?Я не могу не ждать своего обещания, потому что я использую лямбду, но я хотел бы позволить им работать вместе

1 Ответ

1 голос
/ 05 июля 2019

Вы должны сделать асинхронную функцию для использования async-await в Nodejs. Вы должны использовать только ключевое слово async в функции 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( 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 ) );
...