双异步循环,如何保证正确排序顺序的最终结果?(javascript)

Dual asynchronous loops, how to guarantee correct sorted order for end result? (javascript)

本文关键字:结果 javascript 顺序 排序 循环 异步 何保证      更新时间:2023-09-26

在我开始之前,请不要问为什么我想在javascript中这样做,只知道我需要,如果它让你感觉更好,我只是想。

那么,假设我有一个数组(这个数字是任意的,实际应用将在300或更多,然而,我选择它,因为它是一个奇数)在一个数组中有19个索引,例如,我想把这些索引以完全相同的顺序放入另一个数组中使用两个异步循环来完成它(我知道这可以简单地通过执行arrayOne = arrayTwo;来完成,我只是在这个例子中使用数组)

我如何保证放入第二个数组的值的顺序是正确的?也就是说,这样做的逻辑或大意是什么?(也欢迎代码示例,如果需要,我也可以自由使用jquery。)

停止或停止等待一个循环完成当然是与使用异步循环相反的,因为它们会同时工作以更快地处理此任务。

这是一个JSfiddle,它在当前状态下不工作,但显示了我所说的基本概念(可能工作,如果你把它从JSfiddle中取出并把它放在一个真正的。js文件)我很确定这段代码显示了如何构建循环和检查,当两个循环完成时,但我不知道如何确保他们把变量放在正确的顺序。

我很可能没有很好地解释我自己,如果没有回应,我打算在几个小时内修改和编辑这个问题。如果你需要更多的细节,请在评论中问我,我会尽量详细说明我的意思。谢谢。

一个明显的解决方案是将原始数组中的项映射到存储原始索引的包装器中,然后,在所有操作完成后,根据存储的索引对结果数组进行排序,并展开数据。

arrayOne = ["#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8", "#9", "#10", "#11", "#12", "#13", "#14", "#15", "#16", "#17", "#18", "#19"];
var wrapped = arrayOne.map( function(v, i){
    return {
        data: v,
        index: i
    }
});
...
if(loopOneDone && loopTwoDone){
    //Unwrap
    var unwrapped = arrayTwo.sort(function(a, b){
        return a.index - b.index;
    }).map( function(v) {
        return v.data;
    });

    for (i=0;i<unwrapped.length;i++){
        document.getElementById("p1").innerHTML= unwrapped[i] + "<br />" ;   
    }    
    console.log('All done!');
    //Code ends here
}