提问人:Avinash Galanki 提问时间:6/22/2023 更新时间:6/22/2023 访问量:17
为什么这两个代码的执行方式不同?
Why these two codes are executing differently?
问:
我有两个与承诺相关的代码..逻辑是一样的......但是产生不同的输出,为什么呢?
代码 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")})});
我尝试创建一个承诺,并且我的目标是使用 setTimeout 属性在 2 秒后重新爱护的承诺......但得到不同的输出
答:
2赞
jfriend00
6/22/2023
#1
代码 1 中的此结构:
resolve(setTimeout(work,time));
立即解析 promise,解析的值是返回值,其中的 timerID。计时器尚未触发,因为它是非阻塞的(立即返回,计时器稍后触发)。setTimeout()
setTimeout()
代码 2 中的此结构:
setTimeout(()=>{resolve(work())},time);
仅当计时器触发(不是立即)并且解析的值是调用函数的返回值时才解析 promise。work()
评论