【问题标题】:Function returning Array[0] when array has elements | Typescript/Javascript [duplicate]数组有元素时返回 Array[0] 的函数 |打字稿/Javascript [重复]
【发布时间】:2016-12-13 02:01:57
【问题描述】:

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

函数应该返回:

相反,我得到:

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

【问题讨论】:

    标签: javascript arrays typescript


    【解决方案1】:

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

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

    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([]);
      }
    } 
    

    【讨论】:

    • 感谢 Bergi 不仅发布了正确答案,而且还通过链接进行了解释。
    猜你喜欢
    • 2018-12-10
    • 2021-07-03
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多