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 ,帮助我们处理队列
异步操作的常见语法
.ajax('http://www.baidu.com',{ success:function(res){ //ajax回调函数 } }) 1 异步操作以事件为主,比如click,(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 状态一经改变,不会再变

promise过程详解


2018-06-02_083246.png

promise实例一经创建,执行器立即执行
每一个then返回一个新的promise对象
当executor(可能是一个耗时很长的操作)执行完毕,根据是resolve还是reject执行then里面的方法,
一步一步把队列里的方法执行完毕
当多个连续的异步回调时,使用promise有较大的优势

async/await

它就是 Generator 函数的语法糖。
可以结合promise 使用。
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。
当函数执行的时候,一旦遇到await就会先返回,去处理其他操作,等到异步操作完成,再接着执行函数体内后面的语句。
async函数返回一个 Promise 对象。
async函数内部return语句返回的值,会成为then方法回调函数的参数。

import和export

const getToken=(username,password)=>{
   
}
export default{
    getToken
}
import getToken from 'xxx'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,334评论 5 22
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 3,381评论 0 19
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 2,189评论 0 16
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,730评论 1 56
  • 目录:Promise 的含义基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry阅读 1,503评论 0 8