const promise = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); }) promise.then(() => { console.log(3); }) console.log(4);
Promise一旦创建立即执行
所以1,2输出
Promise.then 在所有的代码执行完毕后执行
所以3最后
所以是1243
2、第二题
const promise = new Promise((resolve, reject) => { resolve('success1'); reject('error'); resolve('success2'); }); promise.then((res) => { console.log('then:', res); }).catch((err) => { console.log('catch:', err); })
Promise一旦创建立即执行
resolve函数是当Promise对象的状态从“未完成”变为“成功”(即从pending变为resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数将Promise对象的状态从“未完成”变为“失败”(即从pending变为rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise只能resolve一次,剩下的调用都会被忽略。而一旦状态改变,就不会有再变,所以代码中的reject('error');不会有作用。
reject函数将Promise对象的状态从“未完成”变为“失败”(即从pending变为rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise只能resolve一次,剩下的调用都会被忽略。而一旦状态改变,就不会有再变,所以代码中的reject('error');不会有作用。
所以第二次resolve('success');也不会有作用。
答案:then:success1
答案:then:success1
3、第三题
Promise.resolve(1) .then(2) .then(Promise.resolve(3)) .then(console.log)
Promise.resolve方法的参数,如果是一个原始值,或者是一个不具有then方法的对象
原始值即一些代表原始数据类型的值,也叫基本数据类型,Number,String,Boolean,Null,Undefined这些基本数据类型都是原始值。
则Promise.resolve方法返回一个新的Promise对象,状态为resolved。Promise.resolve方法的参数,会同时传给回调函数。
参数为1,number类型所以为原始值。所以1传给回调函数。
then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。
2不是函数,所以前一个promise的结果是传给回调函数的1,往下传递。
答案 1
答案 1
4、第四题,定时器
定时器相当于一个异步操作,会先向后执行

所以执行结果是