ES6 在当前 Promise 完成后不能 return 一个新的 Promise

ES6 Can't return a new Promise after current Promise finished

我需要以某种方式链接 Promise,然后我发现 Promise 可以完成这项工作。

我的要求是这样的: addressService.get return 一个地址,一旦我得到这个地址并用它来做另一个调用,这也是 return 一个承诺。

所以我的代码是这样的:

class PersonService {
  getPerson() {
    addressService.get().then(({address}) => {
      return 'http://localhost/${address}'
    }).then(url) {
      return new es6Promise.Promise(function(resolve, reject) {
        ApiUtils.get(url, {}, {}, {
          success: resolve, error: reject
        });
      });
    }
  }
}

PersonService's getPerson 还应该 return 一个 Promise,这是我 returned (ApiUtils.get)

的第二个 Promise

但是,上面的代码似乎没有 return Promise,因为当我在其他地方调用 PersonService.getPerson().then() 时,我得到一个错误说

Uncaught TypeError: Cannot read property 'then' of undefined 

我是不是漏掉了什么?

那是因为getPerson() returns什么都没有。您缺少 return 关键字。

正确的结构是:

getPerson() {
 return addressService.get()
                      .then(...)
                      .then(...);
}

旁注:还有其他几个 typos/minor 错误需要修复:

class PersonService {
  getPerson() {
    return addressService.get().then(({address}) => { // <== Added return at beginning of line
      return `http://localhost/${address}`;           // <== Use ` (backtick), not ', for template strings
    }).then(url => {                                  // <== Fixed typo
      return new es6Promise.Promise(function(resolve, reject) {
        ApiUtils.get(url, {}, {}, {
          success: resolve, error: reject
        });
      });
    });                                               // <== Fixed typo
  }
}