كيفية تشغيل وظيفة جافا سكريبت بشكل غير متزامن، من دون استخدام setTimeout؟
-
20-09-2019 - |
سؤال
جانب الخادم في جافا سكريبت (محرك وحيد القرن)، لذلك setTimeout غير متوفر. كيفية تشغيل وظيفة بشكل غير متزامن؟
المحلول
وإلقاء نظرة على المثال Multithreaded Script Execution
في الكركدن أمثلة و> الصفحة. في الأساس، وجافا سكريبت لا يدعم خيوط مباشرة، ولكن قد تكون قادرا على استخدام خيط جافا لتحقيق ما كنت تبحث عنه.
نصائح أخرى
ويمكنك استخدام java.util.Timer
و java.util.TimerTask
للفة مجموعة الخاصة بك / واضح مهلة ومجموعة / وظائف الفاصل الزمني واضحة:
var setTimeout,
clearTimeout,
setInterval,
clearInterval;
(function () {
var timer = new java.util.Timer();
var counter = 1;
var ids = {};
setTimeout = function (fn,delay) {
var id = counter++;
ids[id] = new JavaAdapter(java.util.TimerTask,{run: fn});
timer.schedule(ids[id],delay);
return id;
}
clearTimeout = function (id) {
ids[id].cancel();
timer.purge();
delete ids[id];
}
setInterval = function (fn,delay) {
var id = counter++;
ids[id] = new JavaAdapter(java.util.TimerTask,{run: fn});
timer.schedule(ids[id],delay,delay);
return id;
}
clearInterval = clearTimeout;
})()
ونسخة أخرى باستخدام ScheduledThreadPoolExecutor أ >، متوافقة مع الكركدن 1.7R4 والمقترحة من قبل @ نيكيتا-Beloglazov :
var setTimeout, clearTimeout, setInterval, clearInterval;
(function () {
var executor = new java.util.concurrent.Executors.newScheduledThreadPool(1);
var counter = 1;
var ids = {};
setTimeout = function (fn,delay) {
var id = counter++;
var runnable = new JavaAdapter(java.lang.Runnable, {run: fn});
ids[id] = executor.schedule(runnable, delay,
java.util.concurrent.TimeUnit.MILLISECONDS);
return id;
}
clearTimeout = function (id) {
ids[id].cancel(false);
executor.purge();
delete ids[id];
}
setInterval = function (fn,delay) {
var id = counter++;
var runnable = new JavaAdapter(java.lang.Runnable, {run: fn});
ids[id] = executor.scheduleAtFixedRate(runnable, delay, delay,
java.util.concurrent.TimeUnit.MILLISECONDS);
return id;
}
clearInterval = clearTimeout;
})()
لا تنتمي إلى StackOverflow