简体   繁体   中英

Promise.resolve() return only one element in nested array

Here is my code:

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:

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

data.items[0].array1[0].array2 returned by function apiGet contains 5 elements. But if I put a or b into resolve function, it now just keep first element only like the comments in the snippet.

Could anyone show what I miss here?

Firstly I am not sure why you wrap a promise in a promise.. why do you need to do that when this.api.apiGet returns a promise.

Also, why are you trying to map? I bet if you console.log(data.items) the same data would come back. I think you have just got a little confused with your code. A tidy up of the code should resolve all of this for you.

I would do something like the below, now every time you call search you get all the data back which you can use when you want it.

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM