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)