我理解将一个函数传递给另一个函数作为回调并让它执行,但我不理解这样做的最佳实现.我正在寻找一个非常基本的例子,像这样:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
Run Code Online (Sandbox Code Playgroud)
在myFirstFunction中,如果我确实返回了新的callback(),那么它可以工作并执行匿名函数,但这对我来说似乎不是正确的方法.
我有一个cpu密集型任务,我需要在客户端上运行.理想情况下,我希望能够使用jquery调用该函数并触发进度事件,以便我可以更新UI.
我知道javascript不支持线程,但我看到一些有希望的文章尝试使用setTimeout来模仿线程.
最好的方法是什么?谢谢.
如何进行简单的非块Javascript函数调用?例如:
//begin the program
console.log('begin');
nonBlockingIncrement(10000000);
console.log('do more stuff');
//define the slow function; this would normally be a server call
function nonBlockingIncrement(n){
var i=0;
while(i<n){
i++;
}
console.log('0 incremented to '+i);
}
Run Code Online (Sandbox Code Playgroud)
输出
"beginPage"
"0 incremented to 10000000"
"do more stuff"
Run Code Online (Sandbox Code Playgroud)
如何形成这个简单的循环以异步执行并通过回调函数输出结果?这个想法是不阻止"做更多的东西":
"beginPage"
"do more stuff"
"0 incremented to 10000000"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过关于回调和延续的教程,但它们似乎都依赖于外部库或函数.他们都没有在真空中回答这个问题:如何编写Javascript代码是非阻塞的??
在询问之前,我非常努力地寻找这个答案; 请不要以为我没看.我发现的一切都是Node.js特定的([1],[2],[3],[4],[5])或其他特定于其他函数或库([6],[7],[8],[9],[10],[11]),特别是JQuery和setTimeout().请帮我用Javascript编写非阻塞代码,而不是Javascript和Node等Javascript编写的工具. 请在将其标记为重复之前重新阅读该问题.
假设我这样做
setTimeout(foo, 0);
...
setTimeout(bar, 0);
Run Code Online (Sandbox Code Playgroud)
我可以确定foo会在开始执行之前吗?如果不是0,我会使用1,10或100的超时来表示条形码?
简单的实验表明,在超时值相等的情况下,超时目标的执行顺序与setTimeouts本身相同,但依赖此行为是否安全?
有人可以解释一下Eteration究竟是什么并展示一个例子吗?
来源:道格拉斯克罗克福德的长期任务 YUI博客
我正在使用Web工作人员进行一些CPU密集型工作,但要求工作人员在工作人员仍在处理时响应来自父脚本的消息.
然而,工作人员在处理循环中被锁定时不会响应消息,而我还没有找到一种说明轮询消息队列的方法.因此,似乎唯一的解决方案是以一定间隔中断处理以允许对队列中的任何消息进行服务.
显而易见的选择是使用计时器(比如使用setInterval)但是我已经读过,启动之间的最小延迟很长(http://ajaxian.com/archives/settimeout-delay)这很不幸,因为它会减慢处理速度很多.
其他人对此有何看法?我将尝试onmessage在每个结束时让工作人员自己调度onmessage,从而有效地实现从每个事件收到的处理循环的一个步骤,但只是想知道是否有人对此有任何想法.
谢谢,
我正在尝试将名为VoiceWalker的简单音频实用程序移植到Javascript.VoiceWalker是一个帮助人们录制音频的工具,它的工作原理如下:
因此,它的想法是它播放了一些,重复它,向前滑动,再次播放,重复播放,向前滑动等等.
我拼凑了一个函数来播放声音片段,它看起来像这样:
function clip(audio, start, stop){
audio.currentTime = start;
audio.play();
int = setInterval(function() {
if (audio.currentTime > stop) {
audio.pause();
clearInterval(int);
}
}, 10);
}
Run Code Online (Sandbox Code Playgroud)
提出一个与上述模式匹配的开始/停止时间列表是一个简单的命题,但是有一个问题:我如何排队我的clip()呼叫,以便只有在另一个停止后才能运行?
是否可以编写一个简单的专用Web工作程序,以便它连续处理某些内容并仅在客户端请求时发送其状态.
我到目前为止所做的客户文件:
<script>
// spawn a worker
var worker = new Worker('basic-worker.js');
// decide what to do when the worker sends us a message
worker.onmessage = function(e){
document.getElementById('result').textContent = e.data;
};
</script>
<html>
<head></head>
<body>
<p>The Highest prime number discovered so far : <outpout id="result"></output></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
工人档案:
var n = 0;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found …Run Code Online (Sandbox Code Playgroud) 我在http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html上读到了关于Web Workers的内容,我想我理解他们的目的,但我想知道是否有一个主要目的Web工作者,即"允许执行长任务而不让步以保持页面响应".没有网络工作者可以实现吗?就像注册Callbaks一样,也可以执行长任务,只有在准备就绪时才会中断,不会阻塞,是不是一样?
我想知道如何用JS解决挂页.
我有一个JS循环,我正在测试这样,但它似乎永远挂起 - 有没有办法阻止它挂起,同时仍然完成脚本?:
<div id="my_data"></div>
<script>
function test(value){
output= [];
do{
value++;
output.push(value);
document.getElementById('my_data').innerHTML = (output.join(''));
}while(value < 10000000);
alert('end'); // never occurs
}
test(0);
</script>
Run Code Online (Sandbox Code Playgroud) javascript ×10
html5 ×3
web-worker ×3
callback ×2
asynchronous ×1
audio ×1
function ×1
html5-audio ×1
nonblocking ×1
settimeout ×1
terminology ×1