3 回答

TA貢獻1772條經(jīng)驗 獲得超8個贊
不存在用于本機JavaScript承諾的此類同步檢查API。憑本地承諾是不可能做到這一點的。規(guī)范未指定這種方法。
Userland庫可以做到這一點,如果您要針對特定的引擎(例如v8)并可以訪問平臺代碼(即可以在core中編寫代碼),則可以使用特定的工具(例如私有符號)來實現(xiàn)這一目標。 。這是非常具體的,但不是在用戶領域。

TA貢獻1859條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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
添加回答
舉報