所以,我运行这段代码:
this.db.getDocumentClient()
.then(client => client.query(params).promise())
.then(data => { this.items = data.Items; })
.catch(err => logger.debug('error in refresh tasks', err))
.then(() => { this.refresher && this.refresher.complete() });
并收到此错误:
typescript: D:/Developer/scrum/myApp123/src/pages/tasks/tasks.ts, line: 51
Property 'query' does not exist on type 'void | DocumentClient'. Property 'query' does not exist on type
'void'.
到底什么是"虚无"类型 |文档客户端'?getDocumentClient 看起来像这样:
getDocumentClient() {
return Auth.currentCredentials()
.then(credentials => new AWS.DynamoDB.DocumentClient({ credentials: credentials }))
.catch(err => logger.debug('error getting document client', err));
}
Promise<void | DocumentClient>
是getDocumentClient()
函数的返回类型。问题是,在.catch
中,您不会重新抛出错误,并且函数解析为Promise<void>
。要解决此问题,请将您的方法更改为:
getDocumentClient() {
return Auth.currentCredentials()
.then(credentials => new AWS.DynamoDB.DocumentClient({ credentials: credentials }))
.catch(err => { logger.debug('error getting document client', err); throw err; });
}
这将导致主代码中的承诺失败并进入 catch 部分,而不是解析为 void
然后得到运行时错误。