承诺拒绝默认情况下返回类型 void 。
Promise.reject(reason ?: any)=>无效
比方说,我们有一个getUser函数,该函数返回一个User对象,以传递给例如登录函数。因此,我们使用Promise来解决发现用户的问题,并在找不到用户或发生错误时拒绝。
// getUser returns an object or void
getUser(): Promise<object|void> {
return new Promise((resolve, reject) => {
// user is found
resolve({ user: user });
// user is not found or error
reject();
});
}
login(): void {
this.getUser()
.then((result: object) => {
// get user here to send back
this.res.status(200).json({
user: result['user']
});
})
.catch(() => {
// don't need to receive data here
this.res.status(500).json({
error: 'No login'
});
});
}
getUser(): Promise<object|void>
getUser(): Promise<object>
答案 0 :(得分:1)
通用Promise<T>
的type参数是用于解析 Promise
的类型。因此,在这种情况下,Promise<object>
是正确的(对于某些Promise<User>
类型,甚至是更好的User
)。
使用Promise<object | void>
是错误的,因为Promise
永远不会以void
进行解析。
Typescript实际上并不跟踪用于拒绝 Promise
的值的类型。这是因为Promise
不仅会在您调用reject()
时拒绝,而且还会抛出异常,并且不会尝试跟踪异常的类型。
我要对您的代码进行的唯一其他更改是停止使用object
并明确说明该接口:
interface User { user: string }; // Or whatever it really is
getUser(): Promise<User> {
return new Promise((resolve, reject) => {
// user is found
resolve({ user: user });
// user is not found or error
reject();
});
}
login(): void {
this.getUser()
.then((result: User) => {
// get user here to send back
this.res.status(200).json({
user: result['user']
});
})
.catch(() => {
// don't need to receive data here
this.res.status(500).json({
error: 'No login'
});
});
}