为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs 中 const 函数中的承诺

nodejs 中 const 函数中的承诺

慕村9548890 2023-04-20 16:49:37
这是我的功能 const f = (value,err) => {  if(!value === Number){    throw err;  }  return (value);}使用 promises 我想返回一个参数值的对象,等待一段时间后它将返回number中的参数。那可能吗?
查看完整描述

1 回答

?
FFIVE

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);

    });

};

除了承诺之外,还有两个重大变化:

  1. 用于setTimeout引入异步性,以及

  2. 将条件更改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 已经确定。


查看完整回答
反对 回复 2023-04-20
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信