Я делаю пакет узла, и в моем файловом индексе. js, у меня есть следующий код:
const https = require("https");
const app = {
id: "",
name: "",
token: "",
initialized: false
};
app.initialize = config => {
(app.id = config.id), (app.name = config.name), (app.token = config.token);
const data = JSON.stringify({
id: app.id,
name: app.name,
token: app.token
});
const req = https.request(
{
hostname: "us-central1-encrypton-api.cloudfunctions.net",
port: 443,
path: "/app/get-existence",
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": data.length
}
},
res => {
if (res.statusCode != 200) {
app.id = "";
app.name = "";
app.token = "";
console.log("Encrypton: Error: The Provided Credentials Are Incorrect");
} else {
app.initialized = true;
console.log(app.initialized);
}
}
);
req.write(data);
req.end();
};
module.exports = app;
Что я хочу сделать здесь, это установить свойства переменной приложения, основанный на ответе на запрос http, который я делаю, используя пакет «https» по умолчанию. Теперь этот код используется в тесте. js, который включает в себя следующее:
const encryption = require("./index");
encryption.initialize(require("./permissions.json"));
console.log(encryption.initialized);
Всего в моем коде два журнала консоли, один в индексе. js после установки app.initialized = true
, а другой в конце теста. js. В моей консоли я получаю два журнала: false
и true
.
Очевидно, что здесь происходит то, что происходит в тесте. js console.log (...) выполняется перед app.initialized закончилась, и поскольку на тот момент app.initialized еще не было установлено значение true, оно записывает значение false, а второй журнал, который запускается через несколько секунд после первого, возвращает значение true. Точно так же, если в тесте. js, я регистрирую шифрование, а не encryption.initialized, он также регистрирует объект, как он был первоначально определен в индексе. js
Я хочу знать, как я мог бы использовать async / await или любой другой метод, особенно в моем коде, чтобы исправить это. Я знаю, что многие люди предложили бы использовать какой-либо пакет, отличный от https, но по некоторым другим причинам я бы предпочел придерживаться пакета по умолчанию.
Обратите внимание, что я знаю, как использовать async / await, но я не могу придумать реализацию для этой конкретной c ситуации.