前端面试不焦虑:Promise构造函数是同步还是异步执⾏,then呢

在JS中,Promise构造函数是同步执行的。当你创建一个新的Promise时,传入的执行器函数(executor)会立即被调用,而不会等待任何异步操作完成。执行器函数接收两个参数:resolvereject,它们是两个函数,由JavaScript引擎提供,用于设置Promise的状态和结果值。

一旦执行器函数被调用,它将同步地执行任何操作,包括可能的异步操作。然后,根据操作的结果,调用resolvereject来改变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方法是异步执行的。在这里插入图片描述前端学习资料 我已经打包好啦,私信【学习】即可获取更多前端资料!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值