前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识promise

初识promise

作者头像
wade
发布2020-04-24 17:08:23
4050
发布2020-04-24 17:08:23
举报
文章被收录于专栏:coding个人笔记coding个人笔记
Promise是ES6新出的一个构造函数,最主要的就是为了解决回调地狱的问题。Promise三个状态:pending初始状态,fulfilled(resolve)成功状态,rejected(reject)失败状态。

语法:

new Promise( function(resolve, reject) { } );

Promise构造函数接收一个函数为参数,这个函数接收两个函数参数一个是成功resolve,一个是失败reject。

先看一下最简单的例子:

代码语言:javascript
复制
var promise = new Promise(function (resolve, reject) {
    var num = parseInt(Math.random() * 10);
    if(num > 5){
        resolve(num);
    }else{
        reject('失败了');
    }
});

promise.then(function (value) {
    console.log(value);
}).catch(function (value) {
    console.log(value);
});

随机数大于5就是成功,否则失败。这样一看好像没什么太大的用处,用回调就能解决。确实,如果只是普通的方法或者是只用一次两次的方法,没必要使用Promise,但是封装一个公用的方法,注意是公用方法,意思就是会一直调用,比如ajax、axios或者选择文件方法封装等就很有用。

简单链式调用:

代码语言:javascript
复制
new Promise(function(resolve, reject){
    console.log(100)
    resolve();
}).then(function(resolve, reject) {
    for(var i = 0; i < 10000;i++){
        console.log(200)
    };
}).then(function(resolve, reject)  {
    console.log(300)
});

这样的链式调用会严格按顺序执行,且第一个可以判断成功失败是否执行,但是其他无法拦截失败,虽然这有点旁门左道,但是本人认为有时候简单使用还是可以的。

标准链式调用:

Promise在then方法里面返回一个Promise对象,就可以直接链式调用。

代码语言:javascript
复制
new Promise(function(resolve, reject){
    resolve('star');
}).then(function(data){
    console.log('two: ', data);
    return new Promise(function(resolve, reject){
        resolve('two result');
    });
}).then(function(data){
    console.log('three: ', data);
    return new Promise(function(resolve, reject){
        resolve('three result');
    });
}).then(function(data){
    console.log('end result: ', data);
}).catch(function(err){
    console.log('err: ', err);
});

在return的Promise里面如果是reject,那么会直接执行最后的catch方法。虽然成功是不会执行catch方法,但是最好都写上,就好比switch的default一样。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档