promise和async和await!

189 阅读2分钟

promise和async/await

promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大,ES6规定,Promise对象是一个构造函数,用来生成Promise实例。 下面代码创造了一个Promise实例。

var promise = new Promise(function(resolve, reject) {       
  // ... some code      

 if (/* 异步操作成功 */){      
 resolve(value);     
          } else {      
   reject(error);      
       }     
}); 

Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。 它的作用是为Promise实例添加状态改变时的回调函数。前面说过,then方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数。 then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

getJSON("/posts.json").then(function(json) {
return json.post;
}).then(function(post) {
  // ...
});

1 用于异步计算 2 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果 3 可以在对象之间传递和操作promise ,帮助我们处理队列 异步操作的常见语法 (function(){})... 2 回调主要出现在ajax和file api

 promise 传入一个参数,是一个函数,执行器        
    new promise(        
   /*执行器 executor*/      
      function(resolve,reject){        
    //一段耗时很长的异步操作       
 resolve();//数据处理完成
 reject();//数据处理出错,to do something
   }
)

列如:

new Promise(        
resolve=>{          
setTimeout(()=>{        
resolve('hello')        
},2000)     
}       
)       
.then(value=>{      
console.log('world'+value)      
})      

new Promise(        
  function(resolve,reject){        
  //假装耗时很长的操作 
      setTimeout(function(){       
        resolve('hello')   //数据处理完成,传递到then里面       
   },2000)      
   }        
)       
.then(value=>{      
console.log(value+'world')      
})   

当resolve或者reject完成之后,改变promise的状态

.then(function A(){     
    //成功,下一步      
    },function B(){     
   //失败,做相应处理      
})

1 promise是个代理对象,它和原先要进行的操作并无关系,只是把原先的操作放进了 executor执行器里面里面 2 它通过引入一个回调,以此把其他回调展开,全部变成基于promise的回调,避免更多的回调 promise有3个状态 pending [待定] 初始状态 fulfilled [实现] 操作成功 rejected[被否决] 操作失败 1 当promise 状态发生改变,就会触发.then()里的相应函数处理后续步骤 2 promise 状态一经改变,不会再变

作者:zYbim 链接:juejin.cn/post/684490… 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。