У меня есть функция, как показано ниже
const redirect = async () => {
await aFunc().then(async () => {
await bFunc().then((externalUrl) => {
window.location.href = externalUrl;
});
});
}
из компонента реакции, вызывающего эту функцию, как показано ниже
<Button onClick = { async() => { await redirect(); }}></Button>
Когда я отлаживал этот код, я заметил, что когда он выполняет строку «window.location.href», он не перенаправляется на внешний URL-адрес, а просто перезагружает страницу.
@Teemu да, я получаю там ценность
Это звучит как ожидающая отправка формы, просто не знаю, как ее можно ожидать, обычно отправка прерывает асинхронные действия.
поделиться дополнительной информацией
Здесь (externalUrl) = { ... }
нужно заменить на стрелку, например,
await bFunc().then((externalUrl) => {
window.location.href = externalUrl;
});
Кроме того, я включил как aFunc
, так и bFunc
с обещанием, разрешенным внутри него с помощью setTimeout
.
Итак, здесь функция перенаправления выполняет перенаправление window.location.href
на externalUrl
после разрешения.
Рабочий фрагмент:
const App = () => {
const aFunc = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve("resolved");
}, 500);
});
}
const bFunc = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve("https://stackoverflow.com");
}, 500);
});
}
const redirect = async () => {
await aFunc().then(async () => {
await bFunc().then((externalUrl) => {
if (externalUrl) {
window.location.href = externalUrl;
}
});
});
};
return (
<div>
<button
onClick = {async () => {
await redirect();
}}
>
Click Here
</button>
</div>
);
};
// Render it
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.development.js"></script>
<script src = "https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
Кодыпесочницы:
добавление setTimeOut решило проблему
Вы проверили значение
externalUrl
перед перенаправлением?