首页 > 解决方案 > 在 Typescript 的嵌套箭头函数中返回响应的最佳方法

问题描述

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

  1. 我是否需要两个函数都包含一个“catch”,我返回一个 promise.reject() 还是只需要一个 Catch?
  2. 这种格式仍然给我一个错误“声明类型既不是'void'也不是'any'的函数必须返回一个值”,因为在函数之外没有返回语句。即使在整个过程中使用 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)
        }) 
    }

标签: typescriptasynchronousnestedarrow-functions

解决方案


由于您在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函数返回一个承诺,如果await在你的函数中遇到一个被拒绝的承诺,它也会拒绝这个错误。

所以你根本不需要在这里捕获和手动拒绝任何东西。让async/await他们按照他们的意图工作。


推荐阅读