如何同步确定JavaScript Promise的状态?

我有一个纯JavaScript Promise(内置实现或poly-fill):


var promise = new Promise(function (resolve, reject) { /* ... */ });


根据规范,Promise可以是以下之一:


“解决”和“解决”

“解决”和“拒绝”

“待定”

我有一个用例,希望同步查询Promise并确定:


承诺解决了吗?


如果是这样,承诺是否得到解决?


我知道我可以#then()用来安排Promise更改状态后异步执行的工作。我不是问怎么做。


这个问题专门关于无条件状态的同步询问。我该如何实现?


宝慕林4294392
浏览 2014回答 3
3回答

料青山看我应如是

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

慕丝7291255

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;}

MYYA

不,没有同步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)); // fulfilledpromiseState(b).then(state => console.log(state)); // rejectedpromiseState(c).then(state => console.log(state)); // pending
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript