承诺 - 如何构建需要早期价值观的承诺?

时间:2015-12-07 07:50:44

标签: javascript promise

我有一个函数返回一个调用另一个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函数工厂。

似乎这些方法都不理想。 如何构建一个需要较早值的承诺,并且具有最小的缺点?

0 个答案:

没有答案