在JS中,Promise构造函数是同步执行的。当你创建一个新的Promise时,传入的执行器函数(executor)会立即被调用,而不会等待任何异步操作完成。执行器函数接收两个参数:resolve
和reject
,它们是两个函数,由JavaScript引擎提供,用于设置Promise的状态和结果值。
一旦执行器函数被调用,它将同步地执行任何操作,包括可能的异步操作。然后,根据操作的结果,调用resolve
或reject
来改变Promise的状态。如果执行器函数抛出一个错误,或者调用了reject
,那么Promise将被标记为已拒绝(rejected)。如果执行器函数调用了resolve
,并且没有错误发生,那么 Promise将被标记为已解决(fulfilled)。
然而,then
方法是异步的。它返回一个Promise,这个Promise将在原Promise变为已解决或已拒绝状态时,安排执行相应的处理函数。这些处理函数(通常是回调函数)将在事件循环的下一个迭代中被调用,而不是立即调用。这意味着,如果你在一个Promise链中连续调用多个then
方法,每个then
中的处理函数都将按照它们添加的顺序依次执行,即使前一个处理函数中有异步操作。
下面是一个示例代码,展示了Promise构造函数的同步行为和then
方法的异步行为:
// 创建一个Promise
const myPromise = new Promise((resolve, reject) => {
console.log('Promise constructor is called synchronously');
setTimeout(() => {
resolve('Success!');
}, 1000);
});
// 使用then方法添加处理函数
myPromise.then((value) => {
console.log('Then handler is called asynchronously:', value);
});
// 输出:
// "Promise constructor is called synchronously"
// (等待1秒后)
// "Then handler is called asynchronously: Success!"
在这个例子中,首先打印出"Promise constructor is called synchronously",表明Promise构造函数是同步执行的。然后,等待1秒后,then
方法中的处理函数被调用,打印出"Then handler is called asynchronously: Success!",表明then
方法是异步执行的。前端学习资料 我已经打包好啦,私信【学习】即可获取更多前端资料!!!