在异步循环中构建累加器对象

时间:2018-06-01 23:39:55

标签: angular typescript

我有两个模型,一个带有更改,我正在循环并针对给定ID对同一模型进行更改检测。

我设置a stackblitz repro来说明我想要完成的任务(目前不起作用,只是我试图实现的代码。)

这是一个范围问题吗?这是一个对象变异问题吗?

我需要将(已过滤的)更改列表转换为单个对象,并将所有新更新的属性和值发布到this api/backend

SB的代码关键字

findDeltas = async (newModels: any[]) => {
  const ids = newModels.map(m => m.id);
  let updates: any[] = [];

  await newModels.map = async (newModel) => {
    const id = +newModel.id;
    const model = await fetch('https://jsonplaceholder.typicode.com/posts?userId=1')
      .then(resp => resp.json())[id]; // pretend collection index = item id

    let updateObj = {};
    for (const key of newModel) {
      console.log('Found Key: ' + key);

      // Just filter for changes in one property for this demo
      if (newModel[key] !== model[key] && key === 'title') {
        updateObj[key] = model[key];
        console.log('Update found!: ' + updateObj[key]);
      }
    }

    console.log('Updates found: ' + this.updates.length);
    this.updates.push(updateObj);
    console.log('Updates total: ' + this.updates.length);
  });

  console.log('Updates final: ' + this.updates.length);
}

目前,在循环之外,updateObj对象在返回时仍未定义。

PS:我也试过......

Object.defineProperty(updt, key, {
  enumerable: true,
  configurable: true,
  writable: true,
  value: proposedChange[key]
})

以及......

//changedFieldList.forEach(key => {
for (const key of changedFieldList) {

和...

//const updateObjectPerId = await Promise.all(proposedChanges.map(async (proposedChange) => {
const updateObjectPerId = await proposedChanges.map(async (proposedChange) => {

1 个答案:

答案 0 :(得分:0)

对Angular的kind soulpointed me KeyValueDiffer SimpleChanges似乎是这个问题的答案,我不确定如何问。