我有一个函数返回一个调用另一个promise的Promise,并且它的逻辑需要两者函数参数和Promise的返回值。我尝试了三种不同的方法:
我可以创建一个新的Promise,在promise中调用另一个promise,然后解析()我创建的promise:
function somePromise(functionInput) {
return new Promise(function(resolve, reject) {
anotherPromise().then(function (promiseInput) {
// do something async with promiseInput and functionInput
// .. resolve(foo);
});
});
}
问题:逻辑看起来倒退了 - 我实际上是先调用anotherPromise()
然后在解析之后再说些什么,但return new Promise
是第一行。轻微的回调地狱。
或者,我可以回复我需要调用的承诺,然后将承诺工厂链接到它,并解决这个承诺:
function somePromise(functionInput) {
return anotherPromise().then(function (promiseInput) {
return new Promise(function(resolve, reject) {
// do something async with promiseInput and functionInput
// .. resolve(foo);
});
});
}
问题:有两个返回语句,这些语句肯定令人困惑。轻微的回调地狱。
最后,我当然可以把它分解成一个功能'工厂'......它有一个承诺工厂:
function somePromise(functionInput) {
return anotherPromise().then(doSomething(functionInput));
}
function doSomething(functionInput) {
return function(promiseInput) {
return new Promise(function(resolve, reject) {
// do something async with functionInput and promiseInput
// .. resolve(foo);
});
});
}
问题:我们将回调地狱移动到另一个函数,让三个返回,并拥有一个Promise-factory函数工厂。
似乎这些方法都不理想。 如何构建一个需要较早值的承诺,并且具有最小的缺点?