【问题标题】:Promises in a const function in nodejsnodejs 中 const 函数中的 Promise
【发布时间】: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


    【解决方案1】:

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

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

    1. 使用setTimeout 引入异步,以及

    2. if 条件更改为不总是错误的东西(我可能猜对了也可能没有猜对你想要的东西:-))


    ¹ promise 反应 是对在 promise 上注册的 thencatchfinally 回调的调用。这是我所说的“承诺反应是异步的”的一个例子:

    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 回调(承诺反应)的调用之外,一切都是同步的,根据规范,它总是异步完成的,即使(在这种情况下)承诺已经在反应被添加到它。

    【讨论】:

    • FWIW,我在我的新书 JavaScript: The New Toys 的第 8 章中详细介绍了承诺,如果您有兴趣,请在我的个人资料中链接。
    • 谢谢@TJCrowder。它有助于。我错过了 setTimeout 部分。
    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2018-01-15
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多