Я выполняю сценарий JS с помощью модуля vm в браузере, как показано ниже:
vm.runInNewContext(codeToEval, sandboxObject);
setTimeout, setInterval и другие встроенные методы интервалов не работают, даже если я выставляю их в sandboxObject, созданном с использованием vm.createContext({setTimeout})
console.log('start');
setTimeout(()=> {
console.log('hello timeout');
}, 2000);
console.log('end');
выход:
start
end
Следует отметить, что когда я добавляю .bind (this), то время ожидания срабатывает и прерывается в этой строке, говоря, что .bind не является функцией.
console.log('start');
setTimeout(()=> {
console.log('hello timeout');
}, 2000).bind(this);
console.log('end');
выход:
start
hello timeout
// and an error in console saying setTimeout(...).bind is not a function
// and end is not printed
Chrome 70
Платформа Ubuntu 18.04
V8