考虑以下情况:
为了在后端处理大量工作,我将数据发送到接口并等待结果数据返回。因此,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) 和地狱是的......它是零。它开始处理,但并非所有数据都在数组中并已排序。
我对您的意见或知识非常感兴趣,如果这完全是不可能发生的疯狂的事情。请分享您的知识:-)