错误 - 返回类型不一致(使用闭包编译器Promise)

时间:2017-05-01 23:21:16

标签: javascript angular-promise google-closure-compiler

我正在尝试编写一个进行API调用并返回Promise的函数。这是我的函数定义:

  /**
   * Gets the IAM policy for a service account. Wraps getIamPolicy endpoint:
   * https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/getIamPolicy
   * @param {!Project} project
   * @param {string} email - Unique email for a service account.
   * @return {!angular.$q.Promise<!Object<!string, !Policy>>}
   */
  getIamPolicy(project, email) {
    const path = constructPath_(project, email) + ':getIamPolicy';
    return this.apiClient_.request({method: 'POST', path}, this.config_)
        .then(response => { debugger; });
  }

我正在使用闭包编译器,这会引发编译错误:

service-account-service.js:124: ERROR - inconsistent return type
found   : angular.$q.Promise<undefined>
required: angular.$q.Promise<Object<string,Policy>>
    return this.apiClient_.request({method: 'POST', path}, this.config_)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我做错了什么?我该如何回复承诺?

我使用myiClient_.request辅助函数编写的以前的函数工作正常。我应该从this.apiClient_.request返回相同的值。

策略和项目在外部文件中定义(我相信正确)。我也在使用Angular 1.4

1 个答案:

答案 0 :(得分:2)

错误表示您返回的Promise<undefined>是正确的。当this.apiClient_.request辅助函数返回Promise时,Promise的返回类型(<undefined>位)被.then(response => { debugger; })代码覆盖。即,该代码没有return语句,因此返回undefined

当我将代码更改为:

时,它才有效
return this.apiClient_.request({method: 'POST', path}, this.config_)
    .then(response => {
      debugger;
      return response;
     });