3 回答

TA贡献1772条经验 获得超8个赞
不存在用于本机JavaScript承诺的此类同步检查API。凭本地承诺是不可能做到这一点的。规范未指定这种方法。
Userland库可以做到这一点,如果您要针对特定的引擎(例如v8)并可以访问平台代码(即可以在core中编写代码),则可以使用特定的工具(例如私有符号)来实现这一目标。 。这是非常具体的,但不是在用户领域。

TA贡献1859条经验 获得超6个赞
promise-status-async可以解决问题。它是异步的,但是它并不then用于等待诺言被解决。
const {promiseStatus} = require('promise-status-async');
// ...
if (await promiseStatus(promise) === 'pending') {
const idle = new Promise(function(resolve) {
// can do some IDLE job meanwhile
});
return idle;
}

TA贡献1868条经验 获得超4个赞
不,没有同步API,但这是我的异步版本promiseState(在@Matthijs的帮助下):
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
添加回答
举报