所以基本上我有一个程序可以在服务器端合并数据。 这是一种模拟(在这种情况下,返回始终为真),我正在循环遍历 javascript 1 中的 2 个数组对象,长度为 10,长度为 5,如图所示。
我的目标是,对于每个外部承诺,需要 5 个内部承诺才能移动到下一个外部承诺。
代码如下:
var OuterPromises = range(1, 10);
var InnerPromises = range(1, 5);
$('.--btn-start-promising').click(function() {
var _outerPromise = Promise.resolve();
var OuterPromisesCompleted = 0;
OuterPromises.forEach(OuterPromise =>
_outerPromise = _outerPromise.then(() => CallOuterPromise(OuterPromise)
// .complete(result => {
// OuterPromisesCompleted++;
// $('.--outer-promise-completed').text(OuterPromisesCompleted);
// })
.catch(error => {})));
})
function CallOuterPromise(promise)
{
var _innerPromise = Promise.resolve();
return $.ajax({
url: '/index.php/merger/outerpromise',
success: function() {
var InnerPromisesCompleted = 0;
InnerPromises.forEach(InnerPromise =>
_innerPromise = _innerPromise.then(() => CallInnerPromise(InnerPromise)
// .complete(result => {
// InnerPromisesCompleted++;
// $('.--inner-promise-completed').text(InnerPromisesCompleted);
// })
.catch(error => {})))
}
})
}
function CallInnerPromise(promise)
{
return $.ajax({
url: '/index.php/merger/innerpromise',
success: function() {
}
})
}
function range(min, max){
const arr = Array(max - min + 1)
.fill(0)
.map((_, i) => i + min);
return arr;
}
function SysOut(...args)
{
$.each(args, function(i, a) {
console.log(a);
})
}
Promises 工作,这里的问题是它发生的顺序不正确,而且一些内在的 Promises 没有发生。
执行顺序如下 Outer->Inner->Outer 对于前 9 个外部 promise,然后对于最后一个外部所有其他 5 个内部 promise。
我想要实现的顺序如下:
.. 等等 基本上所有的请求都是 1 × 1 的,当一个外部完成时,内部开始 1 × 1,而不是在准备好时处理下一个外部,依此类推。
我做错了什么?
另外一个注意事项。 您可能会注意到有一个完整的评论。使用时它表示未定义。知道它已完成并更新我的 UI 的方法是什么?
问候。