我正在学习ES6的承诺,并想确认我理解语法。 (如果这有效,但有更好的方法,我也很想知道它!)
假设我正在编写一个返回promise的函数。 (比方说因为我想在一个函数中包装一个async()。then()。then()。then()的序列。)
问题1:我是否正确地认为我需要一个函数,包含在then()中,包含在一个执行函数中,包装在一个promise构造函数中,包含在原始函数中,如下所示?
function iReturnAPromise() {
//do some stuff here
return new Promise(function(resolve, reject) {
doAnAsyncThing()
.then(...)
.then(...)
.then(function(results) {
//resolve with another promise or reject with an error based on results
});
});
}
这种嵌套似乎很疯狂,而且比承诺的“回调地狱/金字塔的厄运”还要糟糕。我是否过于复杂(可能是因为我误解了承诺的某些部分)或者这真的是语法?
问题2:我们假设确实是语法。以下两个片段是否相同?是一个比另一个惯用的吗?
a)在return语句之前做一堆东西,并在promise执行器中只保留异步内容,如下所示:
function iReturnAPromise() {
//do stuff here
//do more stuff
//do even more stuff
return new Promise(function(resolve, reject) {
doAnAsyncThing()
.then(...)
.then(...)
.then(...);
});
}
b)在promise执行者中包装所有内容,如下所示:
function iReturnAPromise() {
return new Promise(function(resolve, reject) {
//do stuff here
//do more stuff
//do even more stuff
doAnAsyncThing()
.then(...)
.then(...)
.then(...);
});
}