У меня есть метод, который выполняет асинхронный запрос ajax для получения информации о разрешении с сервера (SharePoint) для кэширования через JS, чтобы я мог получить к нему доступ для CSR. Иногда это занимает немного больше времени (500 мс) ... не всегда, но иногда остальная часть скрипта загружается так быстро, что ему требуется разрешение до того, как запрос ajax полностью завершен.Javascript: метод синхронного ожидания/задержки
Есть ли простой способ просто отсрочить вывод метода? Я пробовал разные вещи с помощью SetTimeout(), но ничего не получилось.
Вот simplyfied код ...
var Permissions = {
get: function(key) {
while (this.cacheLoaded != true) {
wait(100); //<-- This is what I need
}
return (typeof this[key] != 'undefined' && this[key] == true) ? true : false;
},
cacheLoaded: false,
buildCache: function() {
// load permissions asynchronously by ajax
.
.
.
Permissions.cacheLoaded = true;
}
}
Permissions.buildCache();
.
.
.
doLotsOfOtherStuff();
.
.
.
//Here is the actual call of the get-function:
if (Permission.get('ALOW_DELETE')) {
deleteSomething();
}
Конечно, я мог бы переключить requst Ajax синхронными. Но это задержит загрузку всего скрипта. Поэтому на самом деле я хочу задержать jsut getter в течение нескольких миллисекунд, пока запрос не будет завершен.
У вас нет необходимости делать запрос синхронным, но вы действительно не можете надежно делать что-либо еще до тех пор, пока исходный запрос не будет завершен. Все «doLotsOfOtherStuff» и т. Д. Должны выполняться после загрузки кеша - в обратном вызове ajax. –
Вы не можете 'wait' [пока] (https://jakearchibald.com/2014/es7-async-functions/) - вам нужно поставить логику, которая нуждается в данных внутри обратного вызова (или обработчика Promise) для Запрос AJAX. – joews
Вы видели [это] (http://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done)? –