gpt4 book ai didi

javascript - 在编写新 promise 时如何检查此 promise 状态? js

转载 作者:搜寻专家 更新时间:2023-11-01 00:39:46 26 4
gpt4 key购买 nike

我正在编写一个新的 promise ,它有许多不同的条件调用 reject()resolve() 与其状态相关,我也知道 promise 状态将在第一次调用 reject() 时设置 | 解析()。我的问题是:是否有任何 native (内置)方式来获取 promise 状态?以下是演示代码:

exports.addStatement = function (db, description, data) {
return new Promise(function (resolve, reject) {
validator.validateStatement(description, data)
.then(function (data) {
//......
if(cnd1)
resolve(res);
if(cnd2)
reject(err);
//......
//How to check if this promise is rejected or resolved yet?

})
.catch(function (err) {
reject(err);
})
})
};

最佳答案

您不能直接检查 promise 的状态。他们不是这样工作的。您可以对它们使用 .then().catch() 并通过回调获得通知。

或者,在您的特定情况下,您可以更改代码的结构方式以删除 anti-pattern创建一个不必要的外部 promise 并将您的逻辑切换到 if/else if/else。

这是清理后的代码:

exports.addStatement = function (db, description, data) {
return validator.validateStatement(description, data)
.then(function (data) {
//......
if(cnd1) {
// make res be the resolved value of the promise
return res;
} else if(cnd2) {
// make promise become rejected with err as the reason
throw err;
} else {
// decide what else to do here
}
})
})
};

如果你不能让 if/else 为你工作,上面的结构应该仍然有效,因为 returnthrow 都终止了 .then() 处理程序。因此,在它们之后继续的唯一代码是尚未为当前 promise 设置已解决/拒绝值的代码,因此您不必查看 promise 的状态即可知道。如果代码通过了 returnthrow 并且仍在执行,那么它们都没有被执行并且当前 promise 的 resolved/rejected 值仍然未设置。

关于javascript - 在编写新 promise 时如何检查此 promise 状态? js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38823059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com