首页 > 解决方案 > 在同一个 Promise 对象中调用 then 方法会导致 Promise 永远挂起

问题描述

在 DevTools 中运行以下代码片段,可以看到 Promise 永远处于挂起状态。

(function () {
    const p = new Promise((resolve) => {
        setTimeout(() => resolve(1), 1000);
    }).then((value) => {
        console.log(value, p);
        return p.then((value) => {
            console.log('inner', value);
            return 2
        });
    }).then((value) => {
        console.log('outer', value);
        return 3;
    });
    window.p = p;
})();

那么,有人知道如何解释吗?在非 Promise 世界中是否有任何等效用法?谢谢。

标签: javascriptpromise

解决方案


那么,有人知道如何解释吗?

好吧,p一旦发生就会解决return 3。但在此之前,.then需要先完成。而且您已经设置了它,因此中间部分在解决之前无法完成解决p

简而言之:p直到解决之后才能p解决。因此它永远不会解决。


推荐阅读