首页 > 解决方案 > Promise.resolve() 只返回嵌套数组中的一个元素

问题描述

这是我的代码:

search(): Promise<MyModel[]> {
  const query = {
    'action': 'update',
  };

  return new Promise((resolve, reject) => {
    this.api.apiGet(`${API.SEARCH_STUDENT}`, query).then((data) => {
      const a = data.items.map(i => i);
      const b = data.items.map(i => i);
      console.log(a.array1[0].array2.length);  // 1
      console.log(b.array1[0].array2.length);  // 5
      resolve(a);
    }, (error) => {
      reject(error);
    });
  });
}

MyModel 类:

class MyModel {
  ...
  array1: [{
    array2: []
  }]
}

函数 apiGet 返回的 data.items[0].array1[0].array2 包含 5 个元素。但是如果我将 a 或 b 放入 resolve 函数中,它现在只保留第一个元素,就像片段中的注释一样。

谁能展示我在这里想念的东西?

标签: javascriptangulartypescriptpromise

解决方案


首先,我不确定你为什么将一个承诺包装在一个承诺中......为什么在 this.api.apiGet返回一个承诺时你需要这样做。

另外,你为什么要映射?我敢打赌,如果您console.log(data.items)返回相同的数据。我想你对你的代码有点困惑。整理代码应该可以为您解决所有这些问题。

我会做类似下面的事情,现在每次你打电话时,search你都会得到所有数据,你可以在需要时使用它们。

 search(): Promise<MyModel[]> {
  const query = {
    'action': 'update',
  };

  return this.api.apiGet(API.SEARCH_STUDENT, query)
                        .then((data) => data as MyModel[]));
 }

推荐阅读