Promise对象
Promise是ES6中对于原生异步操作的解决方案,为异步操作提供统一的接口,可以让异步操作代码写起来像写同步操作的流程的代码一样,不用一层层的去嵌套
// 传统写法
step1(function (value1) {
//异步代码1
step2(value1, function(value2) {
//异步代码2
step3(value2, function(value3) {
//异步代码3
step4(value3, function(value4) {
//异步代码4
});
});
});
});
// Promise 的写法
var p1 = new Promise(step1)
.then(step1)
.then(step2)
.then(step3)
.then(step4)
Promise的设计是所有的异步任务都返回一个Promise实例,实例的then就是用来指定下一步的回调函数
1.对象的状态
1.异步操作未完成 - pending
2.异步操作已完成 - fulfilled
3.异步操作失败 - rejected
三个状态里面,fulfilled与rejected合在一起称为已定型(resolved)
这三种状态的的变化途径只有两种
1.未完成->成功 Promise返回一个value,状态为fulfilled
2.未完成->失败 Promise抛出一个error,状态为rejected
一旦状态发生变化就不会再出现其他的状态的变化,一个Promise实例的状态变化只可能出现一次,最终结果只有两种
2.Promise的使用
new Promise(function (resolve, reject) {
console.log("Run");
});
resolve和reject都是回调函数,resolve代表一切正常,reject出现异常时调用的
----------------------------------------------------------------------------------------------------------
使用1
var myPromise = new Promise(function(resolve, reject){
//当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
$.get('/demo',{
data:'test'},res=>{
resolve("成功!"); //代码正常执行!
},'json');
});
myPromise.then(function(msg){
//msg的值是上面调用resolve(...)方法传入的值.
//msg参数不一定非要是字符串类型,这里只是举个例子
console.log(<