javascript - 在同一个 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 世界中是否有任何等效用法?谢谢。
解决方案
那么,有人知道如何解释吗?
好吧,p
一旦发生就会解决return 3
。但在此之前,.then
需要先完成。而且您已经设置了它,因此中间部分在解决之前无法完成解决p
。
简而言之:p
直到解决之后才能p
解决。因此它永远不会解决。
推荐阅读
- c++ - 为什么 Qt QString 的 replace 方法会改变 QString?
- php - PHP preg_match_all 谜语
- rest - Zoho Projects API - 身份验证令牌
- scala - 从 S3 读取压缩的 CSV 文件
- ios - 在 Swift 中自定义栏按钮项
- java - 在java中检测所有具有特定注释的类
- r - 在闪亮的 R 中设置 DT 中的展开行按钮的样式
- java - BigDecimal setScale 使用舍入模式一半甚至不起作用
- asp.net - 在同一连接中,在实体框架命令之前执行 SQL 命令
- c++ - fstream的使用有什么特殊要求吗?