Javascript 处理对象的异步更新

Javascript 处理对象的异步更新,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,这段代码的问题是,由于varAList是并行的,因此将对同一id重复行console.log(`getting${BobObject.id}`)。如果请求已经存在,如何确保异步检查该对象而不重新生成请求? 有什么解决办法吗?你的问题让人困惑,如果你正确理解了你的问题,你就不想重复varAList constglobalobject={}; const varAList=[…]; const varBList=[…]; 异步函数*genarateResult(){ for(变量列表的常量对象){

这段代码的问题是,由于
varAList
是并行的,因此将对同一id重复行
console.log(`getting${BobObject.id}`)
。如果请求已经存在,如何确保异步检查该对象而不重新生成请求?
有什么解决办法吗?

你的问题让人困惑,如果你正确理解了你的问题,你就不想重复
varAList

constglobalobject={};
const varAList=[…];
const varBList=[…];
异步函数*genarateResult(){
for(变量列表的常量对象){
设aObject=varAList.shift();
设obj=globalObject[bObject.id];
让我们返回=[];
如果(!obj){
log(`getting${bObject.id}`);
globalObject[bObject.id]=等待获取对象(bObject.id);
}
if(obj.important==真){
转向。推动(对象某物)
}
产生{[aoobject.id]:toReturn};
}
}
用于等待(genarateResult()的常量值){
控制台日志(val);
}

它回答了你的问题吗?或者我错过了什么?

为什么不尝试将getObject调用设为异步?让map回调保持同步功能。发布的代码似乎被削减得太多了-没有使用
.map
函数参数的
aObject
参数。除此之外,在迭代
varAList
数组之前,尝试填充
globalObject
,这可能是同步完成的,@advayrajansa抱歉,我没有听你的话,在我反复讨论
varAList
之前,我从
getObject
?@traktor populating
globalObject
中删除wait。因为我仍然不知道什么进入了
globalObject
,除非我迭代
varAList
,更改不会编译:
{aObject.id:toReturn}
无效。即使这样做了,循环的其余部分也会生成一个
toReturn
数组,在每个循环迭代中使用相同的值。请在问题中包括代码试图做什么。我们应该迭代
varBList
还是
varAList
?在我的回答中,我重复了
varBList
,对吗?@Bergi,谢谢,我要指出!,稍后我会更新我的答案…我的问题是,当我使用map并在map中等待时,对globalObject的引用有点挑剔,比如在每次迭代或
varAList
,即使我以前可能更新过globalObject,我仍然无法验证该迭代是否在之前完成,因为它是异步的。@Sakibul Alam,你能举个例子吗?这说明了你的问题
const globalObject = {};
const varAList = [.....];
const varBList = [.....];
const varA = await Promise.all(
    varAList.map(
        async (aObject) => {
            const toReturn = [];
            for (const bObject of varBList) {
                if (!globalObject[bObject.id]) {
                    console.log(`getting ${bObject.id}`);
                    globalObject[bObject.id] = await getObject(bObject.id);
                }
                if (globalObject[bObject.id].important == true){
                    toReturn.push(globalObject[bObject.id].something)
                }
            }
            return {aObject.id: toReturn}
        }
    )
);