javascript - ES6 在当前 Promise 完成后无法返回新的 Promise

标签 javascript ecmascript-6 es6-promise

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

我的要求是这样的: addressService.get 返回一个地址,一旦我获得该地址并使用它进行另一个也返回 Promise 的调用。

所以我的代码是这样的:

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

但是,上面的代码似乎没有返回 Promise,因为当我在其他地方调用 PersonService.getPerson().then() 时,我收到一条错误消息

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
  }
}

关于javascript - ES6 在当前 Promise 完成后无法返回新的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34677598/

相关文章:

javascript - 如何将 JS 的 AJAX 输出嵌入到 Javascript 函数中

javascript - 读取推送器数据

javascript - Promise.all() 返回的结果未捕获作用域变量

javascript - ES6 Promise 不更新 AngularJS DOM

javascript - 我可以在上页滑入之前删除之前的页面内容吗?

javascript - 未找到 socket.io.js

javascript - 如何删除JS中的属性并映射新对象?

javascript - 从 ES6 模块导入遗留 js 代码

javascript - 如何配置 WebStorm 以正确格式化生成器函数?

javascript - MeteorJS 中的 Promise