关于promise面试题
var p = new Promise((resolve,reject)=>{
resolve(1)//主动调用resolve,并传入
})
// 此时,P的状态是resolved,且值promiseValue 是1.
p.then((res)=>{
// 因为p的状态是resolved,所以自动执行then的第一个参数,并且把promisevalue传进来。
console.log("then,ok",res)
})
输出结果是then,ok 1
var p = new Promise((resolve,reject)=>{
reject(2)//主动调用reject,并传入实参
})
// 此时,P的状态是rejected,且值promiseValue 是2.
p.then((res)=>{
// 因为p的状态是resolved,所以这句代码不会执行。
console.log("then,ok",res)
},(err)=>{
// 因为p的状态是rejected,所以自动执行then的第二个参数,并且把promisevalue传进来。
console.log("then,err",err)
})
输出结果为then,err,2
var p1 = new Promise(()=>{});
var p2 = p1.then(function f_ok(){}, function f_err(){}); // p2也是一个promise对象。
console.dir(p1); // pending
console.dir(p2); // pending
输出结果:p1为pending p2也为pending
var p1 = new Promise((resolve,reject)=>{ resolve()});
var p2 = p1.then(function f_ok(){
return 1
}, function f_err(){}); // p2也是一个promise对象。
console.dir(p1); // resolved, undefined
console.dir(p2); // resolved, 1
因为p1中resolve没有返回值所以为undefined 而p2 return返回1所以结果为1
var p1 = new Promise((resolve,reject)=>{ resolve()});
var p2 = p1.then(function f_ok(){
var temp = new Promise((resolve,reject)=>{ resolve({a:1}) });
return temp;
}, function f_err(){});
console.dir(p2); // resolved, {a:1}
p1是resolve但是没有返回值所以是undefined 然后走上面的f_ok temp返回值返回给p2所以是resolved{a:1}
var p1 = new Promise((resolve,reject)=>{ resolve()});
var p2 = p1.then(function f_ok(){
console.log(abc);// 这里故意犯错
}, function f_err(){});
console.dir(p2);
上面p1状态为resolved,undefined执行f_ok但是p2里面故意犯错所以这里p2为reject,abc
var p1 = new Promise((resolve,reject)=>{ reject(100)});
var p2 = p1.then(function f_ok(){
}, function f_err(errVal){
var temp = new Promise((resolve,reject)=>{ resolve({b:errVal}) });
return temp;
});
console.dir(p2);
p1为rejected,返回值为100,所以p2走f_err100传给errVal所以p2打印resolved{b:100}
function do1() {
console.log("任务1");
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.then(do3)
.then(do4);
由于p状态为resolved,但是没有返回值所以第一个打印任务一,由于第一个为resolved所有后面会打印任务二,所以依次打印任务一,任务二,任务三,任务四
function do1() {
console.log("任务1");
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.catch(do3)
.then(do4);
由于p的状态为resolved所以会走第一个第二个,到了第三个由于状态为resolved所以不会走,然后走第四个,所以打印结果为任务一,任务二,任务四
function do1() {
console.log("任务1");
console.log(abc); //故意犯错
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.then(do3)
.catch(do4);
由于p状态为resolved,所以会走第一个但是第一个这里故意犯错所以状态变为rejected,第二第三为.then所以不走,第四个为catch所以走第四个,这里就打印任务一,任务四
function increment(value) {
return value + 1;
}
function doubleUp(value) {
return value * 2;
}
function output(value) {
console.log(value);//
}
var p = Promise.resolve(1);
p.then(increment)
.then(doubleUp)
.then(output)
由于p状态为resolved返回值为1所以1会传值到第一个value所以第一个返回值就为1+1=2由于状态值为成功所以会走第二个值传到第二个value里面所以第二个返回值就是4,接着会走第三个所以第三个这里输出4
每日鸡汤
你的人生不会辜负你的。那些转错的弯,那些流下的泪水,那些滴下的汗水,全都让你成为独一无二的自己。