Изменение ссылки href onclick перед навигацией, в обратном вызове ИЛИ подождите, пока обещание не будет выполнено, прежде чем переходить по ссылке - PullRequest
1 голос
/ 05 июля 2019

Я разрешаю пользователям загружать файлы из моего приложения. Файлы являются частными и требуют авторизации для доступа к ним.

В настоящее время веб-интерфейс запрашивает у сервера краткосрочный токен и добавляет его к URL-адресу, чтобы сервер мог убедиться, что авторизованный пользователь пытается его загрузить. Этот токен генерируется на бэкэнде, и каждый раз, когда пользователь хочет загрузить файл, необходимо выбирать новый токен. Основываясь на этом новом токене, определяется URL для загрузки.

Это приводит к некоторым проблемам:

  1. Поскольку у меня нет доступного URL-адреса, пока пользователь не нажмет кнопку «Загрузить», у меня не может быть ссылки href, указывающей на правильный путь к файлу по умолчанию.
  2. Я бы хотел, чтобы пользователь просто щелкнул ссылку для скачивания, и загрузка должна начаться Вот почему я пытаюсь найти способ установить ссылку href после клика. Я бы начал с пустого href и по клику установил бы правильный href и переместился, чтобы начать загрузку. Это было бы хорошо, если бы не был задействован асинхронный вызов , но здесь я должен дождаться токена, а затем изменить href, прежде чем продолжить навигацию.

В целом, я пытаюсь понять, есть ли способ приостановить событие и возобновить его после того, как токен будет доступен. Если я предотвращаю дефолт, есть ли способ возобновить дефолт. Или, может быть, мне нужна функция ожидания разрешения обещания, прежде чем переходить по ссылке.

Некоторые альтернативные подходы:

  1. Предоставьте кнопку для «генерации ссылки на скачивание», нажмите эту кнопку, получите маркер загрузки и создайте новую ссылку с соответствующим href и отображением в пользовательском интерфейсе. Теперь пользователь может щелкнуть эту ссылку, чтобы загрузить файл.
  2. Когда исходная ссылка нажата, предотвращение дефолта, получение токена, создание временной ссылки и программный переход по этой временной ссылке.
  3. используйте window.open, когда обещание вернется.
...