Javascript/typescript promise返回两种类型



所以,我运行这段代码:

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 然后得到运行时错误。

最新更新