Используйте результат ajax в качестве переменной с асинхронным/ожиданием

#javascript #jquery #ajax

Вопрос:

Я хочу использовать результат getAccessToken() в функции openFastLink, однако функция не ожидает получения токена, поскольку JS является асинхронным. Я не могу использовать обратные вызовы, так как функция openFastlink является всплывающим окном и должна быть привязана непосредственно к кнопке, чтобы браузер не блокировал ее. Маркер доступа также должен быть получен в том же событии щелчка, что и openFastlink, в качестве требования, и я хочу избежать синхронного вызова ajax с «async: false».

Сейчас я пытаюсь использовать Async/await ниже, однако функция openFastLink по-прежнему не ожидает getAccessToken (), что приводит к ошибке. Я довольно новичок в Js, поэтому буду признателен за любую помощь в решении этой проблемы с учетом требований.

 
async function getAccessToken(args) {
    const result = await $.ajax({
        url: "/request/access-token",
        type: 'POST'
    });

    return result['access_token'];
}


$('#openFastlink').click(function() {
    window.fastlink.open({
      fastLinkURL: 'https://fl4.prod.yodlee.com.au/...',
      accessToken: 'Bearer '   await getAccessToken(),
      forceIframe: true,
      iframeScrolling: true,
      params: {
        configName : 'Aggregation'
      },
      onSuccess: function (data) {
        alert('account linked!');
      }
    },
    'container-fastlink');
});

 

Комментарии:

1. «…однако функция openFastLink все еще не ожидает getAccessToken()…» Этот код вообще не будет выполняться. Синтаксический анализатор выдаст синтаксическую ошибку, потому что вы не можете использовать await ее в нерабочем async режиме.