Node JS: асинхронные HTTP-запросы POST - PullRequest
0 голосов
/ 15 марта 2020

Я делаю пакет узла, и в моем файловом индексе. 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 ситуации.

...