Promise 初探

Promise是什么

异步操作队列化的一系列计算,使其能按照期望的顺序执行。

异步操作常见语法

  • 事件侦听与响应
docement.getElementById('start').addEventListener('click',start,false);
function start(){
 //响应的操作
}
//JQuery 用'.on()' 侦听
$('#start').on('click',start);
  • 回调
$.ajax('http:baidu.com',{
   success:funciton(res){
   //回调函数
   }
 });
   //页面加载完毕后回调
$(function(){
   //回调函数
 });

异步操作的问题

  • 嵌套层次很深,难以维护
  • 无法正常使用return和throw
  • 无法正常检索堆栈信息
  • 多个回调之间难以建立联系

Promise详解

  • Promise 是一个代理对象,它和原先要进行的操作并无关系。
  • 它通过引入一个回调,避免更多的回调。
new Promise(
    function(resolve,reject){
        resolve();//数据处理完成
        reject();//数据处理出错
    }
).then(function A(){
    //成功、下一步
    },function B(){
    //失败,做相应处理
});
  • Promise有3个状态

    pending 待定-初始状态
    fulfilled 实现-操作成功
    rejected 被否决-操作失败

  • Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤。

  • Promise状态一经改变,不会在变。
  • 简单实例
    start1 两秒后输出 hello world
console.log("start1");
new Promise(resolve => {
  setTimeout( () => {
    resolve('hello');
  },2000);
}).then( value => {
  console.log( value + ' world');
});

start2 两秒后输出 hello 再两秒后输出 world World

console.log('start2');
new Promise( resolve => {
  setTimeout( () => {
    resolve('hello');
  }, 2000);
}).then( value => {
  console.log(value);
  return new Promise( resolve => {
    setTimeout( () => {
      resolve(' world')
    }, 2000);
  });
}).then( value => {
  console.log( value + ' world');
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值