【发布时间】:2020-10-06 15:18:07
【问题描述】:
这是我的功能
const f = (value,err) => {
if(!value === Number){
throw err;
}
return (value);
}
使用 Promise 我想返回参数 value 的对象,等待一段时间后它将返回 number 中的参数。这可能吗?
【问题讨论】:
标签: javascript node.js promise async-await
这是我的功能
const f = (value,err) => {
if(!value === Number){
throw err;
}
return (value);
}
使用 Promise 我想返回参数 value 的对象,等待一段时间后它将返回 number 中的参数。这可能吗?
【问题讨论】:
标签: javascript node.js promise async-await
promise 本身不做任何事情,它本身也不做任何异步操作(除了 promise reactions 始终是异步的¹)。 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 或 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");
该代码具有以下输出:
在创建承诺之前 在 promise executor 函数内部 创建承诺后 承诺反应运行,值 = 42请注意,除了对then 回调(承诺反应)的调用之外,一切都是同步的,根据规范,它总是异步完成的,即使(在这种情况下)承诺已经在反应被添加到它。
【讨论】: