Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs不等待在app.js中首先执行异步函数_Node.js - Fatal编程技术网

Node.js Nodejs不等待在app.js中首先执行异步函数

Node.js Nodejs不等待在app.js中首先执行异步函数,node.js,Node.js,我想从AWS secrets中检索我的JWT密钥,然后运行passport.js加载密钥 // app.js // Retrieve secrets from AWS (async () => { console.log("Retrieving AWS Secrets"); await awsSecretManager.getAllSecrets(); })(); require('./components/auth/passport.js'); 但是,在g

我想从AWS secrets中检索我的JWT密钥,然后运行passport.js加载密钥

// app.js
// Retrieve secrets from AWS
(async () => {
  console.log("Retrieving AWS Secrets");
  await awsSecretManager.getAllSecrets();
})();

require('./components/auth/passport.js');
但是,在getAllSecrets函数完成之前,passport.js已经执行。可以验证,因为文件中有我写的日志

const getAllSecrets = async () => {
    try {
        // DB Prod/Dev Secret
        const dbProdSecrets = await getSecretValue("db");
        process.env.RDS_HOST = dbProdSecrets.SecretString.host;
        process.env.RDS_USER = dbProdSecrets.SecretString.username
        process.env.RDS_PASSWORD = dbProdSecrets.SecretString.password
        process.env.RDS_DATABASE = "database"

        // JWT Secret
        const jwtSecret = await getSecretValue("jwt");
        process.env.JWT_SECRET = jwtSecret.SecretString.JWT_SECRET;
    } catch (err) {
        console.log(err);
    }
}

一旦运行app.js,立即调用的函数表达式就会运行,它会在后台获取所有机密信息,而passport文件也会运行。你需要等待。因此,在获取机密后放置所需文件

// app.js
// Retrieve secrets from AWS
(async () => {
  console.log("Retrieving AWS Secrets");
  await awsSecretManager.getAllSecrets();
  require('./components/auth/passport.js');
})();

我宁愿等到一切都完成后再启动服务器

const app = require('express')();
const server = async () => {
    // fetching secrets from aws secrets
    await awsSecretManager.getAllSecrets();
    // on fetching success
    // ... doing other imports
    require('./components/auth/passport.js');
    // configuring my server
    app.get('/', (req,res)=>{
        return res.send("hello");
    });
    // start the server finally
    app.listen(5000, () => console.log("okk"));
};
server();

异步函数在synchron内部起作用,但不适用于外部世界Wait不会首先阻止异步函数异步。await只在async内部工作,而不是全局工作,因此解决方案是重写代码以仅在getAllSecrets完成后加载passport