$.ajax(url1, function(data1){
// do something...
$.ajax(url2, function(data2){
// do something...
$.ajax(url3, function(data3){
// do something...
done(data3); // 返回数据
});
});
});
复制代码
未使用promise,回调必须层层嵌套(回调地狱),代码难以维护,第一的输出是第二个的输入时,须要等待上一个操做完成才能够进行下一个操做,形成没必要要的等待。javascript
promise只有异步操做的结果,能够决定当前是哪种状态,任何其余操做都没法改变这个状态。java
pending->fulfilledpending->rejected。只要这两种状况发生,状态就凝固了,不会再变了,会一直保持这个结果.ajax
代码示例: 默认promise中的executor默认执行数组
let p=new Promise((resolve,reject)=>{
console.log(1);
});
console.log(2);
复制代码
代码示例: 调用onFuifilledpromise
let p=new Promise((resolve,reject)=>{
resolve('成功');
});
p.then((value)=>{//value成功的缘由
console.log(value);
},(err)=>{//err失败的缘由
console.log(err);
})
复制代码
代码示例: 调用onRejected并发
let p=new Promise((resolve,reject)=>{
reject('失败');
});
p.then((value)=>{//value成功的缘由
console.log(value);
},(err)=>{//err失败的缘由
console.log(err);
})
复制代码
代码示例: 成功了就不能失败,相反也同样异步
let p=new Promise((resolve,reject)=>{//
resolve('成功');
reject('失败');
});
p.then((value)=>{//value成功的缘由
console.log(value);
},(err)=>{//err失败的缘由
console.log(err);
})
复制代码
代码示例: 成功了就不能失败,相反也同样函数
let p=new Promise((resolve,reject)=>{
throw new Error('发生错误');
});
p.then((value)=>{//value成功的缘由
console.log(value);
},(err)=>{//err失败的缘由
console.log(err);
})
复制代码
代码示例:ui
Promise1().then((value)=>{
console.log(valuse);
return Promise2();
}).then((value)=>{
console.log(value);
return Promise3();
}).then((value)=>{
console.log(value);
})//能够then到天荒地老
function Promise1(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操做
console.log('异步1');
resolve('异步1传的值');
},1000);
})
}
function Promise2(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操做
console.log('异步2');
resolve('异步2传的值');
},3000);
})
}
function Promise3(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操做
console.log('异步3');
resolve('异步3传的值');
},2000);
})
}
复制代码
输出的值为: 异步1 异步1传的值 异步2 异步2传的值 异步3 异步3传的值this
代码示例:
let p=((isReady)=>{
return new Promise(()=>{
if(isready){
return resolve('hello');
}else{
return reject('failure');
}
});
})
p(true).then((value)=>{
console.log('resolved');
console.log(value);
console.log(aa);
}).catch((err)=>{
console.log('rejected');
console.log(err);
});
复制代码
输出的值为: resolved hell rejected ReferenceError: aa is not defined...
代码示例:
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise1');
},1000);
})
let p2=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise2');
},3000);
})
Promise.all([p1,p2]).then((result)=>{
console.log(result);
})
复制代码
输出结果 ['Promise1','Promise2']
代码实例:
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(1);
resolve('Promise');
},3000);
})
let p2=new Promise((resolve,reject)=>{
console.log(2);
resolve('Promise2');
},1000)
Promise.race([p1,p2]).then((result)=>{
console.log(result);
})
复制代码
输出结果: 2 Promised 1
Promise的基础就到这里了,若是您以为文章有用请点赞!!!