Javascript 如何使用Promise按顺序执行setTimeout,而不考虑时间?
我现在有一段代码:Javascript 如何使用Promise按顺序执行setTimeout,而不考虑时间?,javascript,Javascript,我现在有一段代码: var timeOne = new Promise(function(resolve,reject) { setTimeout(function(){ console.log('This is one'); }, Math.random() * 1000); }); var timeTwo = new Promise(function(resolve,reject) { setTimeout(function(){
var timeOne = new Promise(function(resolve,reject) {
setTimeout(function(){
console.log('This is one');
}, Math.random() * 1000);
});
var timeTwo = new Promise(function(resolve,reject) {
setTimeout(function(){
console.log('This is two');
}, Math.random() * 1000);
});
timeOne.then(timeTwo);
我想要的结果是在timeTwo之前显示timeOne结果,而不管Math.random()提供什么。我现在正在努力实现这个承诺。有人能解释一下为什么上面的代码不能正常工作吗?(它仍然可以在“这是一个”之前显示“这是两个”)。
var timeOne=新承诺(函数(解析、拒绝){
setTimeout(函数(){
解决(“这是一个”);
},Math.random()*1000);
});
var timeTwo=新承诺(函数(解析、拒绝){
setTimeout(函数(){
解决(“这是两个”);
},Math.random()*1000);
});
timeOne.then(函数(m){
控制台日志(m);
返回时间2;
}).然后(函数(m){
控制台日志(m);
返回“完成”;
}).然后(函数(m){
控制台日志(m);
});代码>基本上就是大家在评论中所说的。以下是您如何做到这一点:
var timeOne=()=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(console.log('This is one');
},Math.random()*1000);
});
}
var timeTwo=()=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(console.log('This is two');
},Math.random()*1000);
});
}
timeOne(),然后(timeTwo)代码>你永远不会解决你的承诺。你会立即创建两个承诺,这两个承诺会立即设置两个超时;然后
是相当无用的。您需要1)在某个点解析
第一个承诺,2)在回调函数中解析
,然后创建第二个超时;第二个承诺是完全多余的。谢谢你的帮助。你的代码似乎对我有用。但是,我想问一下,为什么最后一行不是timeOne()。然后(timeTwo())
,当我这样做时,它有时显示的顺序不正确。你能帮我澄清一下吗?你需要把一个函数传递给。然后()
,timeTwo()
不是一个函数,而是一个已执行函数的结果。所以你可以做.then(()=>{timeTwo();})
或者.then(timeTwo)