NodeJS 为什么这两个代码的执行方式不同?

i2loujxw  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我有两个与promise相关的代码..逻辑是相同的...但产生不同的输出,为什么?
代码1

const is_shop_open = true;
const order = (time,work)=>{
        return new Promise((resolve,reject)=>{
            if(is_shop_open===true){
                resolve(setTimeout(work,time));
            }
            else{
                reject("Shop is closed");
            }
        })
};
order(2000,()=>{console.log("Order was placed")})
.then(()=>{order(0o0,()=>{console.log(`production has started`)})})

代码2

//code 2 
const is_shop_open = true;
const order = (time,work)=>{
    return new Promise((resolve,reject)=>{
        if(is_shop_open===true){
            setTimeout(()=>{resolve(work())},time);
        }else{
            reject("Shop is closed");
        }
    })
}
order(2000,()=>{console.log("Order was placed")})
.then(()=>{order(0o0,()=>{console.log("Production has started")})});

我已经尝试创建一个promise,我的目标是通过使用setTimeout属性在2secs后reslove promise...但得到不同的输出

i7uaboj4

i7uaboj41#

代码1中的结构:

resolve(setTimeout(work,time));

立即解析promise,解析后的值是setTimeout()的返回值,即timerID。由于setTimeout()是非阻塞的(立即返回,稍后触发计时器),因此计时器尚未触发。
代码2中的结构:

setTimeout(()=>{resolve(work())},time);

仅当计时器触发(不是立即)并且解析的值是调用work()函数的返回值时才解析promise。

相关问题