当数组包含元素时,函数返回Array [0]打字稿/ JavaScript的

时间:2016-12-13 02:01:57

标签: javascript arrays typescript

我在使用Typescript / Javascript上的函数时遇到了一些问题,我希望函数能够返回一个包含X元素的数组。

该函数应返回:

enter image description here

相反,我得到了:

Sad Array

所以我不能使用任何数组方法,例如map。我不知道为什么当我在推送一个元素后立即登录时,该数组是预期格式的Array [X],但是当我在解析之前登录时我得到一个数组[0]

这是功能:

public getUsers(object: any): Promise<Array<User>> {
let users: Array<User> = [];

return new Promise(resolve => {
  if (object) {
    object.map(userID => {
      this.getUserById(userID).then(user => {
        users.push(this.newResource(user));
        console.log('Right ->', users);
      });
    });
  }
  console.log('Wrong ->', users);
  resolve(users);
});
}

1 个答案:

答案 0 :(得分:2)

您正在记录并resolve before the asynchronous callback(s) runs并推送值 还you are confused by the console

由于您已经在使用promises,因此解决方案很简单:

public getUsers(object: any): Promise<Array<User>> {
  if (object) {
    var p = Promise.all(object.map((userID, i) => {
      return this.getUserById(userID).then(user => {
        console.log('got user '+i, user);
        return this.newResource(user);
      })
    })).then(users => {
      console.log('Right: all done', users);
      return users;
    });
    console.log('Wrong: too early');
    return p;
  } else {
    return Promise.resolve([]);
  }
}