同一个 Promise 实例是否可以有多个 thenable?

Gow*_*m S 4 javascript extjs promise

当我对单个 Promise 对象有多个 thenable 函数时,它会起作用吗?在这种情况下我不想嵌套。我想对同一个承诺对象执行不同的操作。

var a = 0,
t = null,
promiseFun = function () {
    return new Ext.Promise(function (resolve, reject) {
        t = setInterval(function () {
                if (a == 1) {
                    resolve();
                    clearInterval(t);
                } else if (a == 2) {
                    reject();
                    clearInterval(t);
                }
            }, 1000);
    })
};

var promiseObj = promiseFun();
//handler one
promiseObj.then(function () {
    console.log('resolved 1')
}, function () {
    console.log('rejected 1')
}).then(function () {
    console.log('resolved Nest')
}, function () {
    console.log('rejected Nest')
});

//handler two- this is valid ?
promiseObj.then(function () {
    console.log('resolved 2')
}, function () {
    console.log('rejected 2')
});

//OUTPUT:

//resolved 1
//resolved 2
//resolved Nest

Run Code Online (Sandbox Code Playgroud)

或者我需要用Defered换行吗?

jfr*_*d00 8

当我对单个 Promise 对象有多个 thenable 函数时,它会起作用吗?

是的,效果很好。这称为分支而不是链接。

如果你有这个:

let p = somePromiseGeneratingFunction();
p.then(...).then(...);
p.then(...).then(...);
Run Code Online (Sandbox Code Playgroud)

然后,您只需创建两个独立的 Promise 链,每个 Promise 链都会在p解析时启动。如果这是您想要的逻辑,那就完全没问题。

您可以保证的一件事是,第一个p.then()处理程序将在第二个处理程序被调用之前被调用p.then(),但是如果任一链中还有进一步的异步操作,那么它们之后将独立运行,并且不再相互协调。它们是独立且独立的 Promise 链,根据自己的异步操作的时间运行。这就是为什么它被称为“分支”。一条链分支成两条链。

请参阅promise.then.then 与promise.then 之间是否有区别;Promise.then对此主题进行更多讨论。