Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodejs中const函数中的承诺_Javascript_Node.js_Promise_Async Await - Fatal编程技术网

Javascript nodejs中const函数中的承诺

Javascript nodejs中const函数中的承诺,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,这是我的职责 const f = (value,err) => { if(!value === Number){ throw err; } return (value); } 使用promissions,我想返回一个parametervalue的对象,等待一段时间后,它将返回number中的参数。这是可能的吗?承诺本身不会做任何事情,也不会使任何事情在承诺本身和承诺本身都是异步的(除了承诺的反应总是异步的)。承诺只是一种标准化的方式,用于报告(可能)异步的事情的完成

这是我的职责

 const f = (value,err) => {
  if(!value === Number){
    throw err;
  }
  return (value);
}

使用promissions,我想返回一个parametervalue的对象,等待一段时间后,它将返回number中的参数。这是可能的吗?

承诺本身不会做任何事情,也不会使任何事情在承诺本身和承诺本身都是异步的(除了承诺的反应总是异步的)。承诺只是一种标准化的方式,用于报告(可能)异步的事情的完成情况。所以你的问题的字面答案是:不,你不能用承诺来做这件事,不能靠承诺本身。您必须将它与类似于
setTimeout
或类似的东西结合起来

还要注意,
如果(!value==Number)
总是false。它的计算如下:
!值
,求反
的值,然后求反
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上注册的
    然后
    捕获
    、或
    最后
    回调的调用。下面是我所说的“承诺反应是异步的”的一个例子:

    console.log(“在创建承诺之前”);
    新承诺(解决=>{
    log(“在承诺执行器函数内”);
    决心(42);
    })
    .然后(值=>{
    log(`Promise reaction run,value=${value}`);
    });
    
    console.log(“创建承诺后”)承诺本身不会做任何事情,也不会使任何事情在承诺本身和承诺本身都是异步的(除了承诺的反应总是异步的)。承诺只是一种标准化的方式,用于报告(可能)异步的事情的完成情况。所以你的问题的字面答案是:不,你不能用承诺来做这件事,不能靠承诺本身。您必须将它与类似于
    setTimeout
    或类似的东西结合起来

    还要注意,
    如果(!value==Number)
    总是false。它的计算如下:
    !值
    ,求反
    的值,然后求反
    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上注册的
    然后
    捕获
    、或
    最后
    回调的调用。下面是我所说的“承诺反应是异步的”的一个例子:

    console.log(“在创建承诺之前”);
    新承诺(解决=>{
    log(“在承诺执行器函数内”);
    决心(42);
    })
    .然后(值=>{
    log(`Promise reaction run,value=${value}`);
    });
    
    console.log(“创建承诺后”)
    FWIW,我将在我的新书《JavaScript:新玩具》第8章中详细介绍承诺,如果您感兴趣,请访问我个人资料中的链接。谢谢@TJCrowder。这很有帮助。我错过了setTimeout部分。FWIW,我在新书《JavaScript:新玩具,我个人资料中的链接》(如果您感兴趣)第8章中详细介绍了承诺。谢谢@tjcrower。这很有帮助。我错过了设置超时部分。