为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2019-11-28 15:11:44
我有一个纯JavaScript Promise(内置实现或poly-fill):var promise = new Promise(function (resolve, reject) { /* ... */ });根据规范,Promise可以是以下之一:“解决”和“解决”“解决”和“拒绝”“待定”我有一个用例,希望同步查询Promise并确定:承诺解决了吗?如果是这样,承诺是否得到解决?我知道我可以#then()用来安排Promise更改状态后异步执行的工作。我不是问怎么做。这个问题专门关于无条件状态的同步询问。我该如何实现?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

不存在用于本机JavaScript承诺的此类同步检查API。凭本地承诺是不可能做到这一点的。规范未指定这种方法。

Userland库可以做到这一点,如果您要针对特定的引擎(例如v8)并可以访问平台代码(即可以在core中编写代码),则可以使用特定的工具(例如私有符号)来实现这一目标。 。这是非常具体的,但不是在用户领域。


查看完整回答
反对 回复 2019-11-28
?
慕丝7291255

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;

}


查看完整回答
反对 回复 2019-11-28
?
MYYA

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


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 2013 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号