如何同步确定 JavaScript Promise 的状态?
2022-08-30 01:07:17
对于本机 JavaScript 承诺,不存在这样的同步检查 API。用原生承诺来做到这一点是不可能的。规范未指定此类方法。
Userland库可以做到这一点,如果你的目标是一个特定的引擎(如v8)并且有权访问平台代码(也就是说,你可以在核心中编写代码),那么你可以使用特定的工具(如私有符号)来实现这一点。这是超级具体的,而不是在用户空间中。
不,没有同步API,但这是我的异步版本(在@Matthijs的帮助下):promiseState
function promiseState(p) {
const t = {};
return Promise.race([p, t])
.then(v => (v === t)? "pending" : "fulfilled", () => "rejected");
}
var a = Promise.resolve();
var b = Promise.reject();
var c = new Promise(() => {});
promiseState(a).then(state => console.log(state)); // fulfilled
promiseState(b).then(state => console.log(state)); // rejected
promiseState(c).then(state => console.log(state)); // pending