Javascript ES6 Can';当前承诺完成后,无法返回新承诺

Javascript ES6 Can';当前承诺完成后,无法返回新承诺,javascript,ecmascript-6,es6-promise,Javascript,Ecmascript 6,Es6 Promise,我需要以某种方式把承诺串起来,然后我发现承诺可以完成任务 我的要求是: addressService.get返回一个地址,一旦我得到这个地址,并用它做另一个同样返回承诺的电话 所以我的代码是: class PersonService { getPerson() { addressService.get().then(({address}) => { return 'http://localhost/${address}' }).then(url) {

我需要以某种方式把承诺串起来,然后我发现承诺可以完成任务

我的要求是:
addressService.get
返回一个地址,一旦我得到这个地址,并用它做另一个同样返回承诺的电话

所以我的代码是:

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的getPerson
还应该返回一个承诺,这是我返回的第二个承诺(aputils.get)

然而,上面的代码似乎没有返回承诺,因为当我调用
PersonService.getPerson()。然后()
在其他地方,我得到一个错误,说

Uncaught TypeError: Cannot read property 'then' of undefined 

我错过了什么吗?

那是因为
getPerson()
不返回任何内容。您缺少一个
return
关键字

正确的结构是:

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

旁注:还有几个其他打字错误/小错误需要修复:

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
  }
}
class个人服务{
getPerson(){

return addressService.get().then({address})=>{//这一行有语法错误
。(url){
和get()不返回承诺,请添加
addressService.get
的代码。这些都是真正的反向标记,因为它们看起来像单个标记。就个人而言,我赞成让工具(编译器、解释器、repl、调试器)查找拼写错误,而不是人类。这更简单、更快,而且你不必等待人类的回答。事实上,整个问题都是关于一堆拼写错误,如果你将返回作为一种特殊的拼写错误,那么这个问题应该以拼写错误结束。@torazaburo我不太同意。主要错误,这是我在my post与其他打字错误一起编辑,是OP未能理解
。然后()
返回承诺本身,应该由
getPerson()
返回。实际上问题是:“如何返回内部承诺”,这不是一个好主意,也是对承诺如何工作的误解。这不是一个打字错误。它是有效的JS,尽管不起作用。