Внутренняя часть функции в Typescript обрабатывается после внешней части, хотя внешняя часть кода написана под внутренней частью - PullRequest
0 голосов
/ 08 февраля 2020

Я работаю с Typescript в Ioni c 4. Моя проблема в том, что часть внутренней функции обрабатывается после внешней части, хотя внешняя часть кода написана под внутренней частью. Это большая проблема для меня, потому что возвращаемое значение всегда неверно. Если я хочу правильное значение, я должен вызвать функцию дважды. Вот мой код, который вы также можете увидеть в связанном изображении здесь. Функция читает только файл json и возвращает объект json.

ReadFile(filename: string, fileFunktion: string) {
    this.http.get(filename).subscribe((data) => {
      this.data = data;
    });
    return this.data;
      }

Можете ли вы дайте совет, как решить эту проблему? Спасибо:)

1 Ответ

0 голосов
/ 08 февраля 2020

Функция подписки является асинхронной, аналогично тому, как обещания являются асинхронными. Таким образом, ваша функция запускает http-запрос, который выполняется в фоновом режиме. Во время работы программа продолжает работу и возвращает все, что установлено для this.data.

Как это исправить, зависит от того, как вы хотите обработать асинхронную природу c. Один простой способ - преобразовать наблюдаемое в обещание и использовать async / await, чтобы получить что-то вроде:

async ReadFile(filename: string, fileFunktion: string) {
    this.data = await this.http.get(filename).toPromise()
    return this.data
}

ReadFile - это асинхронная функция c, поэтому она всегда возвращает обещание, поэтому вам потребуется используйте await при вызове:

await ReadFile('foo', 'barr')

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

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