2017-08-11 138 views
0

我已经阅读了许多关于如何使用done()和$ .ajax()的不同文章。据我了解,ajax返回一个promise,所以done()应该在完成时执行,这似乎正在发生,但是在each()循环中,一旦达到第一个ajax函数,第二个循环会在第一个循环循环仍在处理中。使用each()和ajax()done()同步处理ajax

这是问题的一个基本的jsfiddle:

https://jsfiddle.net/kLja50xa/1/

我期望的结果是:

1-1 2-1 1-2 2-2

我试图请求推到一个数组的选项,但这意味着更多的嵌套each()ajax()循环具有相同的问题?

我需要按顺序处理这些数据的原因是循环中的一些实例需要用户输入。

我可以强制使用async:false所需的结果。但出于显而易见的原因,我想避免这种情况。而且这对脚本有额外的影响,因此我无法定位并更新跟踪消息,通知用户进程在哪里。

+1

如果要强制排序,那么你就不能只是发射所有异步请求在一次函数。 – Phylogenesis

+0

@Phylogenesis - 我不想一次性全部解除它们,这就是为什么我一旦收到第一个结果就使用done()来触发下一个请求的原因。你有关于如何做到这一点的建议? – n00bstacker

回答

1

我不认为是可能的循环....尝试使用,将调用它的自我一旦Ajax是做

fiddle

eachArray(阵列)的功能;

function eachArray(array){ 
    $i++; 
    console.log('1-'+$i); 
    ajax.done(function() { 
    console.log('2-'+$i); 
    if($i<array.length){ 
     eachArray(array); 
    } 
    }) 
} 

另一个ES6很酷的功能将使用generators实际上是暂停其代码,直到你再次调用

+0

非常简单!谢谢! – n00bstacker