0

Имеется функция, выполняющая запрос к API. Не понимаю, как вернуть значение из асинхронной функции request

request(urlPart: string) {
    const auth =
      "Basic " +
      Buffer.from(this.username + ":" + this.httppass).toString("base64");
    const http = require("http");
    http
      .get(
        this.url?.concat(urlPart),
        { auth: this.username + ":" + this.httppass },
        (resp: any) => {
          let data = "";

          // A chunk of data has been recieved.
          resp.on("data", (chunk: any) => {
            data += chunk;
          });

          // The whole response has been received. Print out the result.
          resp.on("end", () => {
            return JSON.parse(data.substr(5).substring(0, data.length - 1));
          });
        }
      )
      .on("error", (err: any) => {
        return JSON.parse(err.message);
      });
  }

1 Answers1

2

Если функция, внутри которой вы вызываете асинхронный request, тоже является асинхронной, то вы можете просто использовать await:

let result = await request('http://example.com');

Await останавливает асинхронный поток и ожидает выполнения функции после себя. Соответственно, если поток не асинхронный, то использовать его не получится.
Если главная функция не асинхронна, то придется сделать ее таковой. Главный синхронный поток не будет ждать выполнения реквеста.

artomich
  • 1,022
  • 5
  • 9