Javascript 我保证,它的行为很奇怪

Javascript 我保证,它的行为很奇怪,javascript,promise,Javascript,Promise,我有一个问题,我想,这对你们中的一些人来说真的很容易,但我不明白为什么Javascript会这样控制台下面的代码按顺序记录“c、a、b、d”。为什么会这样? var doSomething=函数(){ 返回新承诺((res,rej)=>{ res(); }); } var doSomethingElse=功能(par){ 控制台日志(par); } doSomething()。然后(函数()){ 返回剂量(a); }); doSomething()。然后(函数()){ doSomethingE

我有一个问题,我想,这对你们中的一些人来说真的很容易,但我不明白为什么Javascript会这样控制台下面的代码按顺序记录“c、a、b、d”。为什么会这样?

var doSomething=函数(){
返回新承诺((res,rej)=>{
res();
});
}
var doSomethingElse=功能(par){
控制台日志(par);
}
doSomething()。然后(函数()){
返回剂量(a);
});
doSomething()。然后(函数()){
doSomethingElse('b');
});
doSomething()然后(doSomethingElse('c');
然后(()=>doSomethingElse('d'),然后(doSomethingElse('c')doSomethingElse立即执行
如果您延迟承诺响应,您将看到时差

var doSomething=函数(){
返回新承诺((res,rej)=>{
setTimeout(()=>res(),3000);
});
}
var doSomethingElse=功能(par){
控制台日志(par);
}
doSomething()。然后(函数()){
返回剂量(a);
});
doSomething()。然后(函数()){
doSomethingElse('b');
});
doSomething()然后(doSomethingElse('c');

然后(()=>doSomethingElse('d')
最后一行调用该函数,而不是将其传递给
然后
。其他的只是按顺序执行,但是您不应该假定任何特定的顺序,因为承诺链都是不相关的。doSomethingElse('c')正在调用函数并使用它返回的内容。由于它不返回任何内容,因此基本上是
doSomething()。然后(未定义)