Этот код:
(async ()=>{
let i=0;
while (1) {
await sleep(1);
console.log(i++);
}
})();
function sleep(ms){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
resolve();
},ms);
})
}
корректно работает в браузере, но в пользовательском скрипте Tampermonkey происходит сбой:
Uncaught (in promise) TypeError: Cannot convert undefined or null to object
at eval (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:24)
at new Promise (<anonymous>)
at sleep (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:23)
at eval (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:18)
после почти 3 тыс. Итераций.
Я думаю, что обещанияне работает правильно в Tampermonkey.
Используется Chrome 74, Tampermonkey 4.8.41
Есть идеи?
Обновление: Ошибка не вобещаю.Этот код тоже не работает:
(function() {
'use strict';
function doWork(){
console.log(doWork.i++);
setTimeout(doWork,1);
}
doWork.i=0;
doWork();
})();
В опере и FF все работает отлично.
Обновление: Бесконечные циклы только для примера.Но это было проверено на работоспособность и утечки памяти в узлах, chrome, FF.Я думаю, это происходит со многими (> 4k для меня) асинхронными вызовами в одном скрипте Tampermonkey.Попробую дать какой-нибудь другой код без бесконечных циклов.