У меня есть длинная функция javascript, она может обрабатываться через несколько секунд. Но я хотел бы ограничить время выполнения javascript, если оно длиннее X секунды, независимо от результата выполнения функция будет убита. Возможно ли это реализовать в JS? Благодарю.Можно ли ограничить выполнение функции javascript?
ответ
Я использовал обещания достичь этого. Я только начал 2 обещания: во-первых, это моя функция для выполнения обертки в обещании, вторая - обещание тайм-аута - когда операция считается неудачной и использует отказ в ней.
Использование Promise.race
Я просто жду, какое действие будет выполнено в первую очередь. Если второй - отказ, если сначала - мой код успешно завершен.
Вот пример:
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, "long_execution");
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "ok");
});
var p3 = new Promise((resolve, reject) => {
setTimeout(reject, 1000, "reject");
});
Promise.race([p1, p3]).then(values => {
console.log(values);
}, reason => {
console.log(reason)
});
Promise.race([p2, p3]).then(values => {
console.log(values);
}, reason => {
console.log(reason)
});
Это надежное решение для длительных задач async, но я думаю, что OP имеет блокирующий синхронный вызов функции. – joews
JavaScript является однопоточный, так что одна потребность использовать механизм асинхронной, чтобы добиться того, что вы пытаетесь сделать.
Один из способов сделать это с помощью единого обещания с помощью TimeOut. Если тайм-аут происходит, то вы обещаете Отклонить, и если не обещание, будет разрешено.
код образца может выглядеть как
var PTest = function() {
return new Promise(function (resolve, reject) {
setTimeout(function() {
reject();
}, 2000)
// Lines of Code
resolve();
});
}
var myfunc = PTest();
myfunc.then(function() {
console.log("Promise Resolved");
}).catch(function() {
console.log("Promise Rejected");
});
- 1. Можно ли прервать выполнение функции JavaScript?
- 2. Ограничить выполнение общей функции javascript для элемента
- 3. можно ли ограничить закладку?
- 4. Возможно ли ограничить область действия функции javascript?
- 5. Node.JS Можно ли изолировать или ограничить доступ к функции?
- 6. Можно ли остановить выполнение в javascript/jquery?
- 7. Выполнение функции JavaScript из объекта
- 8. функции JavaScript синхронного выполнение
- 9. Javascript - Выполнение функции асинхронно
- 10. Быстрое выполнение функции Javascript
- 11. Javascript автоматическое выполнение функции
- 12. Выполнение функции Javascript от
- 13. Groovy: возможно ли ограничить выполнение сценария времени?
- 14. Ограничить выполнение Javascript через HTTP-заголовок
- 15. Можно ли ограничить доступные теги/функции в шаблонах Smarty?
- 16. В Javascript можно ли остановить выполнение внешней функции из внутренней функции?
- 17. Можно ли ограничить аргументы НЕ делегатами?
- 18. Можно ли наследовать от объекта функции javascript?
- 19. Можно ли передать это в функции javascript
- 20. Можно ли переопределить мини-функции JavaScript
- 21. Можно ли ограничить размер переменной JavaScript в битах?
- 22. Выполнение функции JavaScript по-разному
- 23. Остановить выполнение рекурсивной функции javascript
- 24. Можно ли разрешить выполнение функции содержимого в области браузера?
- 25. Можно ли остановить выполнение функции во время ожидания прослушивателя событий?
- 26. Можно ли ограничить количество посмешиваемых вызовов функций?
- 27. Можно ли ограничить поля в адресной книге, которые можно редактировать?
- 28. Оценка или выполнение функции javascript
- 29. Выполнение функции JavaScript слишком рано
- 30. Выполнение функции в javascript/jquery
Как бы вы убиваете функцию? – samayo
Вы можете сделать это с проверкой внутри самой функции (например, 'if (timeInFunction> 1000) return'). Вы не можете использовать какой-либо внешний супервизор, потому что JS имеет один поток выполнения. – joews
Что вызывает функцию так много времени? Есть внутри петля? Это одна конкретная линия? – Weedoze