前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6系列_14之promise对象的简单使用

ES6系列_14之promise对象的简单使用

作者头像
wfaceboss
发布2019-04-08 10:31:56
3590
发布2019-04-08 10:31:56
举报
文章被收录于专栏:wfacebosswfaceboss

1.产生原因

在前端开发中,最常见的的就是"回调",我相信很多人对于这个"回调"可谓是印象深刻呢。究其原因是因为层层回调会造成所谓的“回调地狱 (callback hell)”(最明显的就是代码的层层嵌套)

2.解决办法

实解决回调地狱的办法有很多,从代码书写层面就可以将绝大部分回调代码写的尽量简单易懂。这里主要是关于Promise 的。

Promise自 ES6 起成为 Javascript 的语言标准。但是其最早是由 Javascript 社区提出并实现的。Promise规范和标准了异步操作 API,基本上所有的异步操作都可以使用Promise的写法处理。Promise对象内部保存着异步操作的结果,并通过链式调用的方式避免了回调函数层层嵌套的写法。

3.基本用法

代码语言:javascript
复制
new Promise((resolve, reject) => {

Promise构造函数接收一个函数作为参数,这个函数的两个参数分别为resolve和reject。这也是两个函数,其值会由 Javascript 传入,使用者只需要在异步操作完成时调用resolve函数并传入下一步操作所需要的值即可。使用者可以通过链式调用的方式为Promise对象添加后续操作。 reject函数则是在异步操作发生异常时被调用,此时Promise可以捕获到传入reject参数中的值。

下面通过一个简单的小例子学习试用一下Promise:

promise执行多步操作非常好用,那我们就来模仿一个多步操作的过程,那就以吃饭为例吧。要想在家吃顿饭,是要经过三个步骤的。

  1. 洗菜做饭。
  2. 坐下来吃饭。
  3. 收拾桌子洗碗。

这个过程是有一定的顺序的,你必须保证上一步完成,才能顺利进行下一步

为了方便代码结构的查看,

1.首先将上述三个步骤封装成三个函数(供Promise调用)

代码语言:javascript
复制
let isOk=true  //默认全部通过

//第一步
function step1(resolve,reject) {
    console.log('1.开始-洗菜做饭');
    if(isOk){
        resolve('洗菜做饭--完成');
    }else{
        reject('洗菜做饭--出错');
    }
}
//第二步
function step2(resolve,reject) {
    console.log('2.开始-坐下来吃饭');
    if(isOk){
        resolve('坐下来吃饭--完成');
    }else{
        reject('坐下来吃饭--出错');
    }
}

//第三步
function step3(resolve,reject) {
    console.log('3.开始-收拾桌子洗完');
    if(isOk){
        resolve('收拾桌子洗完--完成');
    }else{
        reject('收拾桌子洗完--出错');
    }
}

2.然后使用Promise来按顺序执行上述过程

代码语言:javascript
复制
new Promise(step1).then(function(val){
    console.log(val);
    return new Promise(step2);
}).then(function(val){
     console.log(val);
    return new Promise(step3);
}).then(function(val){
    console.log(val);
    return val;
});

最终输出到控制台的结果为:

通过上述我们对Promise有了基本的了解,后续我们将继续深入学习。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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