Javascript 返回已解决承诺的时间差异

Javascript 返回已解决承诺的时间差异,javascript,promise,event-loop,Javascript,Promise,Event Loop,我有一个函数,它做了大量的工作,然后返回一个已解决的承诺。解决每个问题的时间安排是否有差异 选项1 函数returnPromise(){ //做一堆事情 返回承诺。解决(); } 这样: 选项2 函数returnPromise(){ 返回新承诺((解决、拒绝)=>{ //做一堆事情 解决(); }); } 选项1是否在所有工作完成后释放控制,选项2是否在函数调用后立即释放控制?我觉得这是因为我不完全理解事件循环。提前感谢您帮助我理解这一点 这样做有区别吗 不,你的两个例子做了完全相同的事情

我有一个函数,它做了大量的工作,然后返回一个已解决的承诺。解决每个问题的时间安排是否有差异

选项1

函数returnPromise(){
//做一堆事情
返回承诺。解决();
}
这样:

选项2

函数returnPromise(){
返回新承诺((解决、拒绝)=>{
//做一堆事情
解决();
});
}
选项1是否在所有工作完成后释放控制,选项2是否在函数调用后立即释放控制?我觉得这是因为我不完全理解事件循环。提前感谢您帮助我理解这一点

这样做有区别吗

不,你的两个例子做了完全相同的事情

Promise.resolve
Promise.reject
只是Promise类上的静态方法,可以帮助您避免在不需要的时候构建一个完整的
Promise

这样做有区别吗

不,你的两个例子做了完全相同的事情

Promise.resolve
Promise.reject
只是Promise类上的静态方法,可以帮助您避免在不需要的时候构建一个完整的
Promise

解决每个问题的时间安排是否有差异

没有区别。Promise executor(传递给
新Promise()
的回调)将立即同步调用。因此,在这两种情况下,您都会立即同步返回一个已解析的承诺,并且函数中的所有代码都已执行

在执行时间上不应该有任何有意义的差异。当然,执行的CPU周期可能略有不同,但两者的结果完全相同,并且都立即返回一个已经解决的承诺,因此调用代码应该没有任何差异

Promise.resolve()
只是一种更紧凑(可能更高效)的方法,用于创建已解决的承诺

选项1是否在所有工作完成后释放控制,选项2是否在函数调用后立即释放控制

当你所有的工作都完成了,他们都会回来,他们会给你一个已经决定好的承诺。这是因为对
newpromise()
的执行器回调是同步调用的(在函数返回之前)

我觉得这是因为我不完全理解事件循环。提前感谢您帮助我理解这一点

在这种特殊情况下,所有代码都是同步运行的,因此事件循环没有特别的参与。当函数中的代码同步执行完成时,
returnPromise()
函数返回(在这两种情况下)。这里没有异步代码


当您对返回的承诺执行
.then()
操作时,会涉及到事件循环,因为即使承诺(在这两种情况下)已被解析,
.then()
处理程序在事件队列中排队,并且在
处理程序执行完之后,直到Javascript的其余部分才运行。then()
处理程序执行完毕

console.log("1");
returnPromise().then(function() {
    console.log("2");
});
console.log("3");
这将生成相同的输出结果:

1
3
2
使用两个版本的
returnPromise()
函数,因为
.then()
处理程序将排队,直到事件循环的下一个勾号(例如,在当前Javascript执行线程的其余部分完成之后)

解决每个问题的时间安排是否有差异

没有区别。Promise executor(传递给
新Promise()
的回调)将立即同步调用。因此,在这两种情况下,您都会立即同步返回一个已解析的承诺,并且函数中的所有代码都已执行

在执行时间上不应该有任何有意义的差异。当然,执行的CPU周期可能略有不同,但两者的结果完全相同,并且都立即返回一个已经解决的承诺,因此调用代码应该没有任何差异

Promise.resolve()
只是一种更紧凑(可能更高效)的方法,用于创建已解决的承诺

选项1是否在所有工作完成后释放控制,选项2是否在函数调用后立即释放控制

当你所有的工作都完成了,他们都会回来,他们会给你一个已经决定好的承诺。这是因为对
newpromise()
的执行器回调是同步调用的(在函数返回之前)

我觉得这是因为我不完全理解事件循环。提前感谢您帮助我理解这一点

在这种特殊情况下,所有代码都是同步运行的,因此事件循环没有特别的参与。当函数中的代码同步执行完成时,
returnPromise()
函数返回(在这两种情况下)。这里没有异步代码


当您对返回的承诺执行
.then()
操作时,会涉及到事件循环,因为即使承诺(在这两种情况下)已被解析,
.then()
处理程序在事件队列中排队,并且在
处理程序执行完之后,直到Javascript的其余部分才运行。then()
处理程序执行完毕

console.log("1");
returnPromise().then(function() {
    console.log("2");
});
console.log("3");
这将生成相同的输出结果:

1
3
2

使用两个版本的
returnPromise()
函数,因为
.then()
处理程序将排队,直到事件循环的下一个勾号(例如,在当前Javascript执行线程的其余部分完成之后)。

每个处理程序何时将控制返回到事件循环?在所有的工作完成后,第一个会屈服吗