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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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函数,它现在只保留第一个元素,就像片段中的注释一样。

有人能展示我想念的吗?

答案

首先,我不确定你为什么要在承诺中包含一个承诺。为什么当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[]));
 }

以上是关于Promise.resolve()只返回嵌套数组中的一个元素的主要内容,如果未能解决你的问题,请参考以下文章

手写promise.all和race

期待2个承诺的结果等于一个(结合2个承诺数组)

Promise.resolve()的参数分4种情况

Promise.resolve()与new Promise(r =; r(v))

return Promise.resolve

await 与 Promise.all 结合使用