1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
promise 本身不做任何事情,它本身也不做任何異步操作(除了 promise反應(yīng)總是異步的)。promise 只是一種標(biāo)準(zhǔn)化的方式來報(bào)告(可能)異步的事情的完成。所以你的問題的字面答案是:不,你不能使用承諾來做到這一點(diǎn),而不是靠它自己。您必須將它與類似setTimeout或類似的東西結(jié)合起來。
另請注意,這if (!value === Number)始終是錯(cuò)誤的。它的計(jì)算方式如下:!value,否定 的值value,然后x === Number,這將始終為 false,因?yàn)闆]有任何值在被否定時(shí)變成函數(shù)Number。
但是,例如,如果你想檢查某物是否是數(shù)字但在 100 毫秒內(nèi)沒有響應(yīng):
const f = (value, err) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof value !== "number") {
reject(err);
} else {
resolve(value);
}
}, 100);
});
};
除了承諾之外,還有兩個(gè)重大變化:
用于
setTimeout
引入異步性,以及將條件更改
if
為不會總是錯(cuò)誤的東西(我可能猜對了也可能沒有猜對你想要的東西:-))
1 promise 反應(yīng)是對在 promise 上注冊的then
,catch
或callback 的調(diào)用。finally
這是我所說的“承諾反應(yīng)是異步的”的例子:
console.log("Before creating the promise");
new Promise(resolve => {
console.log("Inside the promise executor function");
resolve(42);
})
.then(value => {
console.log(`Promise reaction ran, value = ${value}`);
});
console.log("After creating the promise");
該代碼具有以下輸出:
Before creating the promise
Inside the promise executor function
After creating the promise
Promise reaction ran, value = 42
請注意,除了對回調(diào)的調(diào)用then(promise 反應(yīng))之外,一切都是同步的,根據(jù)規(guī)范,回調(diào)總是異步完成的,即使(如本例)在將反應(yīng)添加到其中時(shí) promise 已經(jīng)確定。
添加回答
舉報(bào)