Как использовать «Promise.then =>» вне условного в Typescript - PullRequest
0 голосов
/ 17 июня 2019

Я пишу функцию в TypeScript, которая выглядит следующим образом:

record_time():any {
    if (some_condition) {
        axios.post('api/time').then(() =>
            updateTimeDisplay()
        );
    } else {
        axios.put('api/time').then(() =>
            updateTimeDisplay()
        );
    }
}

И это работает, но, как вы можете видеть, я вызываю одну и ту же строку, updateTimeDisplay(), независимо отусловна.Для краткости, я хотел бы знать, есть ли способ переписать это так, чтобы я написал только updateTimeDisplay() один раз.Попробовал что-то вроде ниже, но код сломался с этой ошибкой: Cannot find name 'then'.Vetur(2304)

record_time():any {
    if (some_condition) {
        axios.post('api/time');
    } else {
        axios.put('api/time');
    }.then(() =>
      updateTimeDisplay()
    )
}

[Обновление] Я понял, что для моего случая имеет больше смысла изменить структурувот так (отделите updateTimeDisplay от record_time и вызовите обе функции внутри другой функции):

async switch_button_status_record_time() {
    await this.switch_button_status();
    await this.record_time();
    updateTimeDisplay();
}

async record_time() {
    if (some_condition) {
        axios.post('api/time')
    } else {
        axios.put('api/time')
    }
}

Однако это привело к сбою кода - иногда updateTimeDisplay вызывался бы неправильно,У меня сложилось впечатление, что строки с await будут вызываться по порядку (switch_button_status, затем record_time, затем updateTimeDisplay).Что здесь не так?

1 Ответ

3 голосов
/ 17 июня 2019

Вы пропустили назначение.

record_time():any {
  var apiPromise;
  if (some_condition) {
    apiPromise = axios.post('api/time');
  }else {
    apiPromise = axios.put('api/time');
  }

  apiPromise.then(() =>
    updateTimeDisplay()
  )
}

Или вы можете сжать это до:

var apiPromise = some_condition ? axios.post('api/time') : axios.put('api/time');
apiPromise.then(() => updateTimeDisplay());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...