前提:
1.假设函数f1和f2异步执行,f1和f2在promise中被调用
2.f1执行所需的时间不确定,且f1中有可能会有其他异步操作
问题:
无法确定f1所处的Promise对象中,resolve返回的正确位置
解决方案:
基本的f1和f2代码段如下:
var f1=function(){
setTimeout(function(){
console.log('this is p1');
},2000)
}
var f2=function(){
console.log('this is p2');
}
方案一:
1.完全不考虑f1的执行时间,直接返回resolve
2.输出:this is p2 this is p1
2.评价:失败; f2先于f1执行
var p1=function(){
return new Promise(function(resolve,reject){
f1();
resolve(); //调用f1后直接执行了resolve,但是f1实际没有执行完成
});
}
var p2=function(){
return new Promise(function(resolve,reject){
f2();
});
}
p1()
.then(p2);
方案二:
1.将resolve传参到f1中执行,如下需要改写下f1的定义
2.输出&