1 回答
TA贡献1797条经验 获得超6个赞
promise 本身不做任何事情,它本身也不做任何异步操作(除了 promise反应总是异步的)。promise 只是一种标准化的方式来报告(可能)异步的事情的完成。所以你的问题的字面答案是:不,你不能使用承诺来做到这一点,而不是靠它自己。您必须将它与类似setTimeout或类似的东西结合起来。
另请注意,这if (!value === Number)始终是错误的。它的计算方式如下:!value,否定 的值value,然后x === Number,这将始终为 false,因为没有任何值在被否定时变成函数Number。
但是,例如,如果你想检查某物是否是数字但在 100 毫秒内没有响应:
const f = (value, err) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (typeof value !== "number") {
reject(err);
} else {
resolve(value);
}
}, 100);
});
};
除了承诺之外,还有两个重大变化:
用于
setTimeout
引入异步性,以及将条件更改
if
为不会总是错误的东西(我可能猜对了也可能没有猜对你想要的东西:-))
¹ promise 反应是对在 promise 上注册的then
,catch
或callback 的调用。finally
这是我所说的“承诺反应是异步的”的例子:
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
请注意,除了对回调的调用then(promise 反应)之外,一切都是同步的,根据规范,回调总是异步完成的,即使(如本例)在将反应添加到其中时 promise 已经确定。
添加回答
举报