के लिए प्रतीक्षा कर रहे हैं मैंने कुछ समय पहले सी # में एक सी दुभाषिया बनाया था और अब इसे जावास्क्रिप्ट में परिवर्तित करना शुरू कर दिया है। सब कुछ ठीक हो रहा था जब तक मुझे एहसास नहीं हुआ कि जेएस में कोई नींद नहीं है। मेरा दुभाषिया एक पुनरावर्ती पार्सर का उपयोग करता है और यह उपयोगकर्ता इनपुट के लिए रुक जाता है, जबकि यह कई कार्यों को गहरा कर देता है (सी # में मैंने दूसरे थ्रेड में वाइंडंडल का उपयोग किया)। मैंने setInterval और setTimeout को देखा है लेकिन वे असीमित/गैर-अवरोधक हैं; बेशक एक व्यस्त चालक सवाल से बाहर है और मैंने एसओ पर पाया गया एक timed_queue कार्यान्वयन देखा लेकिन कोई किस्मत नहीं। मैंने मुख्य विंडो और वेबवर्कर में पार्सर की कोशिश की है। मैं jQuery का उपयोग कर रहा हूँ। मेरे पास जेएस के साथ सीमित अनुभव है और मैं आगे बढ़ने के लिए विचारों की तलाश में हूं। मैं निरंतरता गुजरने वाली शैली, या उपज के बारे में बहुत कुछ जानता हूं और सोच रहा हूं कि क्या वे कुंजी पकड़ सकते हैं। यहां कुछ नियंत्रण सूची दिखाने के लिए कोड से थोड़ा सा कटौती दी गई है। कोई भी विचार करें ...जावास्क्रिप्ट नेस्टेड लूप उपयोगकर्ता इनपुट
var STATE = {
START: "START",
RUN: "RUN", //take continuous steps at waitTime delay
STEP: "STEP", //take 1 step
PAUSE: "PAUSE",//wait for next step command
STOP: "STOP",
ERROR: "ERROR"
}
var state = state.STOP;
function parsing_process() //long process we may want to pause or wait in
{
while(token !== end_of_file)//
{
//do lots of stuff - much of it recursive
//the call to getNextToken will be encountered a lot in the recursion
getNextToken();
if (state === STATE.STOP)
break;
}
}
function getNextToken()
{
//retrieve next token from lexer array
if (token === end_of_line)
{
//tell the gui to highlight the current line
if (state === STATE.STOP)
return;
if (state === STATE.STEP)//wait for next step
{
//mimick wait for user input by using annoying alert
alert("click me to continue")
}
if (state === STATE.RUN) {
//a delay here - set by a slider in the window
//a busy wait haults processing of the window
}
}
}
मैं इस मिल गया है फ़ायरफ़ॉक्स में काम करने के लिए task.js
<html>
<head>
<title>task.js examples: sleep</title>
<script type="application/javascript" src="task.js"></script>
</head>
<body>
Only works in FIREFOX
<button onclick="step()">Step</button>
<button onclick="run()">Run</button>
<button onclick="stop()">Stop</button>
<pre style="border: solid 1px black; width: 300px; height: 200px;" id="out">
</pre>
<script type="application/javascript;version=1.8">
function start() {
process();
}
function step() {
if (state === STATE.STOP)
start();
state = STATE.STEP;
}
function run() {
if (state === STATE.STOP)
start();
state = STATE.RUN;
}
function stop() {
state = STATE.STOP;
}
var STATE = {
START: "START",
RUN: "RUN", //take continuous steps at sleepTime delay
STEP: "STEP", //take 1 step
PAUSE: "PAUSE",//wait for next step command
STOP: "STOP",
ERROR: "ERROR"
}
var state = STATE.STOP;
var sleepTime = 500;
function process() {
var { spawn, choose, sleep } = task;
var out = document.getElementById("out");
var i=0;
out.innerHTML = "i="+i;
var sp = spawn(function() {
while(state !== STATE.STOP)
{
i++;
out.innerHTML = "i="+i;
if (state === STATE.RUN)
{
yield sleep(sleepTime);
}
if (state === STATE.STEP)
state = STATE.PAUSE;
while (state===STATE.PAUSE)
{
yield;
}
}
});
}
</script>
</body>
</html>
का उपयोग कर मैं इसे सराहना करते हैं अगर कोई है जो वादे के बारे में कुछ पता था कि मुझे कुछ और सुराग दे सकता है। मेरा आवेदन उपभोक्ता नहीं है लेकिन यह अच्छा होगा अगर यह फ़ायरफ़ॉक्स
* पर्यावरण * क्या आप चल रहे हैं? 'नींद' समारोह की अनुपस्थिति मुख्य रूप से एक * पर्यावरण * चीज है, न कि भाषा की बात है। –
आपको वादे का उपयोग करना चाहिए। – SLaks
क्या आप समझा सकते हैं कि इसका उपयोग कैसे किया जा सकता है, यानी, उद्देश्य क्या है? – Roberto