Преобразование dotenv в AWS getSecretValue, как экспортировать модуль, представляющий собой смесь asyn c и syn c? - PullRequest
1 голос
/ 02 мая 2020

Извинения заранее, довольно новый для Node; вот мой текущий код: syn c:

const path = require('path');
const dotEnvPath = path.resolve('./.env');
require('dotenv').config({
    path: dotEnvPath
});

module.exports = {
    env: process.env,
};

Но я хочу также получить ту же информацию из AWS менеджера секретов, когда мой env не dev, используя

client.getSecretValue({SecretId: name})

, то есть asyn c / callback / et c - проблема в том, что экспорт модуля завершается задолго до возврата вызова AWS, что приводит к экспорту без чего-либо (если не dev). Я не могу вернуть Обещание, потому что остальная часть кода должна быть изменена, чтобы разрешить их - есть ли чистый способ, которым я могу экспортировать модуль таким способом, используя данные из асинхронной c метод?

1 Ответ

0 голосов
/ 02 мая 2020

Начиная с текущего состояния реализаций Javascript, вы не можете напрямую экспортировать асинхронно полученное значение, потому что экспорт происходит синхронно, прежде чем любая асинхронная операция может быть завершена.

Обычный обходной путь заключается в экспортировать функцию, которую может вызвать вызывающая сторона, и эта функция возвращает обещание, которое разрешается с асинхронным значением. Затем вы можете либо выбрать экспорт своей синхронной части напрямую, и позволить вызывающей стороне вызвать вашу экспортированную функцию, чтобы получить асинхронную часть, либо вы можете просто поместить синхронную и асинхронную части в разрешенное значение обещания, которое возвращает ваша функция. Когда часть операции является синхронной, а часть - асинхронной, все значение можно получить только асинхронно.

Я не могу вернуть Promise, потому что остальная часть кода должна быть изменена чтобы решить их - есть ли чистый способ, которым я могу экспортировать модуль таким способом, используя данные из асинхронного c метода?

У вас нет выбора здесь. Вы не можете синхронно экспортировать асинхронное значение с текущего состояния Javascript. В настоящее время ведется работа по стандартизации для обеспечения механизма асинхронного экспорта, в котором процесс экспорта может фактически блокировать процесс загрузки до тех пор, пока не будет получен результат, но он пока недоступен.

Итак, если вы хотите включить асинхронное значение в ваши экспорты, вызывающие абоненты должны будут изменить способ импорта, если они хотят получить это асинхронно полученное значение. Там нет выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...