【问题标题】:Best way to return response within nested arrow functions in Typescript在 Typescript 的嵌套箭头函数中返回响应的最佳方法
【发布时间】:2020-07-23 06:35:55
【问题描述】:

在 Typescript 中有一个嵌套的异步函数,我想在其中返回一个对象的承诺。

  1. 我是否需要这两个函数都包含一个“catch”,我返回一个 promise.reject() 还是只需要一个 Catch?
  2. 这种格式仍然给我一个错误“声明类型既不是 'void' 也不是 'any' 的函数必须返回一个值”,因为在函数之外没有 return 语句。即使在整个过程中使用 try catch 也会给我同样的错误。
    async getContactByGUIDQuery(GUID: string): Promise<Contact> {
        this.findContactByGUID(GUID).then(async (query) => {
            this.querySalesforce(query).then(async (response) => {
                return response.compositeResponse[0].body
            }).catch((err) => {
                return Promise.reject(err)
            })
        }).catch((err) => {
            return Promise.reject(err)
        }) 
    }

【问题讨论】:

  • return this.querySalesforce...?不,根本没有必要立即捕获错误以返回具有相同错误的被拒绝承诺。

标签: typescript asynchronous nested arrow-functions


【解决方案1】:

由于那里有async 关键字,我假设您可以在您的环境中使用await。这让事情变得容易多了。

我相信这个函数做的完全一样。

  async getContactByGUIDQuery(GUID: string): Promise<Contact> {
    const query = await this.findContactByGUID(GUID)
    const response = await this.querySalesforce(query)
    return response.compositeResponse[0].body
  }

async 函数返回一个 Promise,如果 await 在您的函数中遇到一个被拒绝的 Promise,它也会以该错误拒绝。

因此,您根本不需要在这里捕获和手动拒绝任何内容。让async/await 按预期工作即可。

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 2013-11-20
    • 2020-11-30
    • 2020-07-16
    • 1970-01-01
    • 2012-09-30
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多