Promise.resolve()仅返回嵌套数组中的一个元素

时间:2018-07-11 14:54:23

标签: javascript angular typescript promise

这是我的代码:

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函数中,则现在只保留第一个元素,就像片段中的注释一样。

有人可以在这里显示我想念的吗?

1 个答案:

答案 0 :(得分:0)

首先,我不确定您为什么将诺言包装在诺言中。为什么当您需要这样做时 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[]));
 }