【发布时间】:2015-07-17 16:48:24
【问题描述】:
考虑以下情况:
为了在后端处理大量工作,我将数据发送到接口并等待结果数据返回。因此,ajax 调用非常完美。因为不知道,以什么顺序接收结果,并且我需要以特定顺序的结果之前我可以显示任何东西,如果所有发送的任务都正确返回,我将只调用一个函数.这可以通过一个简单的(简化的,不精确的)信号量变量来完成,该变量计算发送了多少任务。
var tasks = 0;
do {
// things to prepare
tasks++;
$.post("foo.php",data, function(data) {
tasks--;
foo(data);
});
}while(thereIsMore);
foo(data) {
// push data to array
// sort the array
if(tasks == 0)
processResults(array);
}
Javascript 被称为单任务,而不是多任务。 我真的可以说,在访问数组和任务计数器时不可能有任何互斥的情况,因为它永远不会发生? 我对异步行为有点困惑,可能会想到可以给出赛车情况的场景?
一个例子(以及我的理解):
3 任务在非常短的时间内发送和接收。 因此,所有响应都以一种调度方式处理。 任务 1 已检查(如果任务 == 0)并且它是错误的。任务 2 在检查任务之前暂停一条指令,任务 3 现在作为成功处理程序执行。任务 3 现在减少任务,其值为 0。任务 3 暂停,任务 2 恢复。任务 2 检查 if(tasks==0) 和地狱是的......它是零。它开始处理,但并非所有数据都在数组中并已排序。
我对您的意见或知识非常感兴趣,如果这完全是疯了,那是不可能发生的。请分享您的知识:-)
【问题讨论】:
标签: javascript ajax mutex