求助,关于Promise,谢谢大佬。
发布于 7 年前 作者 sevenzhou1218 3161 次预览 最后一次回复是 7 年前 来自 问答
有一个需求,比方说是一个任务队列[taskA, taskB,taskC,taskD,…],他们按照顺序执行(先吃饭,吃饭完成后,再去喝水,喝完以后再去上班,等等),然后我需要给他们提供一个暂停的功能,我的想法是给他们提供一个无限暂停的方法,于是就想到了下面的两个方法。好像废话有点多,不知道有没有表达清楚。
问题1:doWait1这个写法可行吗? 理论上一个Promise如果没有resolve或者reject,那么他的状态会一直是pending,那么他是不是应该能起到无限暂停的功能,等待收到继续指令时,执行g.resolve(true);? 问题2: 如果doWait1这种写法可行,那么和doWait2方法相比哪个方法好?doWait2的想法是,提供一个递归吧,让他一直setTimeout,直到收到继续指令,将flag的值变为false时停止。
求大神指导,谢谢。
const g = {};
let flag = true;
function doWait1(){
return new Promise((resolve, reject)=>{
g.resolve = resolve;
g.reject = reject;
//注意:没有任何其他代码,更没有resolve或者reject
});
}
function doWait2(data){
return new Promise((resolve, reject)=>{
//timer取多少合适?
setTimeout(()=>{
resolve(data);
}, 100);
}).then((d)=>{
if(d){
//继续等待
console.info('waiting');
return doWait2(flag);
}else{
//等待结束
console.info('finished');
return true;
}
});
}
4 回复
感觉dowait1好一些
不过用async/await的话会更简单解决这个问题
胡乱写了一个
下面代码引用自 Deferred
@William17 嘿,谢谢,这段代码至少让我知道,我的第一个写法是没问题的。
@dislido 厉害! 我会尝试着用你这个思路去改写我的代码的,谢谢。