JavaScript 基础和高级教程

JavaScript 基础和高级教程

Promise 用来传递异步操作的消息

在实际的使用中,有非常多的应用场景我们不能立即知道应该如何继续往下执行。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API可供进一步处理

需求

  1. 解决回调地狱
  2. 为了代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来

状态

  1. pending: 等待中或者进行中,表示还没有得到结果
  2. resolved(Fulfilled): 已经完成,表示得到了我们想要的结果可以继续往下执行
  3. rejected: 也表示得到结果,但是由于结果并非我们所愿因此拒绝执行

这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆

var promise = new Promise(function(resolve, reject) {
 if (/* 异步操作成功 */){
 resolve(value);
 } else {
 reject(error);
 }
});

promise.then(function(value) {
 // success
}, function(value) {
 // failure
});

基本的API

  1. Promise.resolve()
  2. Promise.reject()
  3. Promise.prototype.then()
  4. Promise.prototype.catch()
  5. Promise.all() 所有的完成
  6. Promise.race() 完成一个即可
//请求某个table数据
function requestTableList(){
    var p = new Promise((resolve, reject) => {
           //去后台请求数据,这里可以是ajax,可以是axios,可以是fetch 
            resolve('Hello');
    });
    return p;
}
//延时函数,用于给请求计时 10s
function timeout(){
    var p = new Promise((resolve, reject) => {
        setTimeout(() => {
            reject('请求超时');
        }, 10000);
    });
    return p;
}
Promise.race([requestTableList(), timeout()]).then((data) =>{
  //进行成功回调处理
  console.log(data);
}).catch((err) => {
  // 失败回调处理
    console.log(err);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值