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
}
}
我需要以某种方式链接 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)
但是,上面的代码似乎没有 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
}
}