我在使用Typescript / Javascript上的函数时遇到了一些问题,我希望函数能够返回一个包含X元素的数组。
该函数应返回:
相反,我得到了:
所以我不能使用任何数组方法,例如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);
});
}
答案 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([]);
}
}