Сделай топор ios, позвони с другого топора ios обещай и сохрани возвращенные данные - PullRequest
1 голос
/ 25 апреля 2020

Я делаю вызов топором ios из обещания другого вызова axios, код выглядит следующим образом, вызов в основном из первого метода во второй метод.

ОБНОВЛЕНО КОД, ОСНОВАННЫЙ НА ПРЕДЛОЖЕНИИ Он просто говорит: не может использовать ключевое слово 'await' вне функции asyn c, тогда я пытался

var data = async () => {
        await this.checkParentLoggerLevel();
      };

все еще не работал

async updateLevel(logger, level, index) {
      alert(index);
      axios
        .post(
          'url'
        )
        .then(() => {
          var data = await this.checkParentLoggerLevel();

          alert('waiting');
          alert(
            'This will be executed before the second methods returns HEllo'
          );
          alert(data);
        });
    },

Второй метод:

async checkParentLoggerLevel() {
      alert('inside checkParentLoggerLevel ');
      return await axios
        .get('url')
        .then(() => {
          alert('returning hello');
          return 'hello';
        });
    },

Моя цель - сохранить возвращенную hello в переменную данных в первом методе. Это не работает. Другая проблема возникает после того, как выполнение кода вызова методов this.checkParentLoggerLevel() продолжается и не ожидает возвращенного значения.

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Это происходит потому, что внутри checkParentLoggerLevel вы не ждете, пока не выполнится обещание axios. Вы можете сделать это следующим образом:

async checkParentLoggerLevel() {
  alert('inside checkParentLoggerLevel ');
  return await axios
    .get('url')
    .then((res) => {
      return 'hello';
    });
}

Кроме того, вам нужно ждать внутри updateLevel как:

async updateLevel() {
  axios
    .post(url)
    .then(async (res) => {
      var data = await this.checkParentLoggerLevel();
      alert("This will be executed before the second methods returns HEllo");
      alert(data);
    });
}
0 голосов
/ 25 апреля 2020

Вы должны связать обещания, так:

updateLevel() {
  axios
    .post(url)
    .then(res => {
      return this.checkParentLoggerLevel.then(data => ([res, data]);
    })
    .then(([res, data]) => {
       // here
    });
}

Или просто с asyn c await:

async updateLevel() {
  const res = await axios.post(url);
  const data = await this.checkParentLoggerLevel();
  // Do whatever you want
}
...