Рабочий код: в Chrome, Firefox
let sleep = function (ms) {
return new Promise(resolve => setTimeout(resolve, ms))
};
И где-то в моей функции я использую асинхронное ожидание, чтобы сделать задержку синхронной
function updateHandler(newTags, tagName, contentIds) {
let deferred = Q.defer(),
counter = 0,
failedIDS = [],
data = {};
data["contentIds"] = contentIds;
data["failedIDS"] = failedIDS;
if (contentIds.length === 0) {
return Promise.resolve(data);
}
//aync and await is here
_.forEach(contentIds, async function (contentId) {
//wait for some time and continue
await sleep(150);
let tags = [], activity;
//API hits..
osapi.jive.core.get({
v: "v3",
href: "/contents/" + contentId + ""
}).execute(function (content) {
tags = content.tags;
activity = content["updated"];
content["tags"] = _.union(tags, newTags);
osapi.jive.core.put({
v: "v3",
href: "/contents/" + contentId + "",
body: content,
"minor": "true",
"updated": activity
}).execute(function (response) {
counter++;
if (response.error) {
failedIDS.push(contentId);
}
if (counter === contentIds.length) {
deferred.resolve(data);
}
}, function (error) {
counter++;
failedIDS.push(contentId);
if (counter === contentIds.length) {
deferred.resolve(data);
}
}
);
})
});
return deferred.promise;
};
Так что 0,15 секунды должно быть дляЭтот API работает и обновляет все элементы.
Поскольку асинхронное и ожидание не работает в IE, я хотел написать базовую функцию wait(ms)
, которая ожидает 0,15 секунды.
Примечание : Таким образом, без функции sleep()
вышеприведенный цикл прекрасно работает для первой итерации, завершается неудачей для второй итерации и завершает выполнение кода.ТАК обязательно требуется задержка в 0,15 секунды для каждой итерации, это ограничение продукта.
setTimeout()
является асинхронным ... поэтому я не использовал его.
Ниже код работает для меня.. Но это не то, что я хочу, потому что браузеру не хватает памяти и больше загрузки процессора, дорого ..
function wait(ms) {
console.log("started............");
var start = Date.now(),
now = start;
while (now - start < ms) {
now = Date.now();
}
console.log("finished............");
}
Вопрос: Я хочукак минимум задержка 0,15 секунды для каждой итерации, как мне ее достичь.
++ Я попробовал следующий способ, рисунок здесь.Успешно обновляет только от 16 до 19 содержимого из 100 повторяемых элементов, а затем выдает тот же error
, что и без функции sleep()
.