我有两个与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...但得到不同的输出
1条答案
按热度按时间i7uaboj41#
代码1中的结构:
立即解析promise,解析后的值是
setTimeout()
的返回值,即timerID。由于setTimeout()
是非阻塞的(立即返回,稍后触发计时器),因此计时器尚未触发。代码2中的结构:
仅当计时器触发(不是立即)并且解析的值是调用
work()
函数的返回值时才解析promise。