У меня есть такой код ниже (частичный код). После части «шаг 4» код продолжается и может перейти на новую страницу (не связанную с результатом функции saveTokenToUser
. НО - я должен быть уверен, что вызовы saveTokenToUser
и ajax
в ней имеют завершено до того, как произойдет перенаправление.
В настоящее время я получаю следующий результат, несмотря на наличие async
и await
в вызове функции. Я предполагаю, что у меня просто неправильный синтаксис?
Шаг 1,
Шаг 2,
Шаг 4,
Шаг 3
Код
alert('Step 1');
// save token if app user:
if (tokenViaApp !== '' ) {
alert('Step 2')
var result = saveTokenToUser(tokenViaApp);
}
alert('Step 4')
async function saveTokenToUser(token) {
await $.ajax({
type: "GET",
// async: false, // deprecated in jQuery 1.8
url: "/includes/notifications/",
data: {
t: token
},
success: function(msg) {
localStorage.token_origin = 'app';
alert('Step 3')
}
});
}
UPDATE:
Следующий ответ T.J. Краудер, теперь это мой код.
JS FIDDLE LINK: https://jsfiddle.net/kneidels/8nsyegz3/
console.log('Step 1')
(tokenViaApp === '' ? Promise.resolve() : saveTokenToUser(tokenViaApp))
.then(() => {
// Do the redirect
console.log('Step 2');
})
.catch(error => {
// Handle/report error
});
console.log('Step 4');
async function saveTokenToUser(token) {
await $.ajax({
type: "GET",
// async: false,
url: "/includes/notifications/",
data: {
t: token
},
success: function(msg) {
localStorage.token_origin = 'app';
console.log('Step 3')
}
});
}
и все, что я сейчас получаю в консоли:
Step 1
Step 4
и строка localStorage
в success: function(msg)
тоже не работает (это очевидно, что шаг 3 также не выполняется.