资讯专栏INFORMATION COLUMN

ES6之Promise

qc1iu / 1260人阅读

摘要:什么是使用有什么优势是异步编程的一种解决方案,优势是可以避免层层嵌套的回调。代表一个异步操作,有三种状态进行中已完成,又称和已失败。当请求数据成功时,通过对外传递请求结果。

1.什么是promise?使用promise有什么优势?

promise是异步编程的一种解决方案,优势是可以避免层层嵌套的回调。

2.产生背景:
在promise出现之前,你肯定写过这样的代码:

$.ajax({
    url1: "......",
    success: function (data1) {
        $.ajax({
            url2: "......",
            success: function (data2) {
               ... //data2的某些操作依赖于data1
            }
        });
    }
});

上述代码中,如果还有data3依赖于data2,那么上述代码将会存在更深层次的嵌套,promise的出现就是解决这些嵌套带来的不优雅和低可读性等问题。

3.promise使用介绍

promise是一个对象,从这个对象中我们可以获取异步操作的结果。
promise代表一个异步操作,有三种状态:
Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)。

创建一个promise:

var promise = new Promise(function(resolve,reject){
    ...some code, such as http request
    if(success){
        resolve(data);   //异步请求成功时,通过resolve向外传递结果
    } else {
        reject(error);   //异步请求失败时,通过reject向外传递结果
    }
});

简单使用案例:

var MongoClient = require("mongodb").MongoClient;

var getData = function(url){
    var promise = new Promise(function(resolve,reject){
    MongoClient.connect(url, function(err, db){
        if(db){
             var collection = db.collection("users");
             collection.find({}).toArray(function(err,docs){
                resolve(docs);
             });
        }
        if(err){
            reject(err);
        }
    });
    });
    return promise;
}

getData("mongodb://localhost:27017/zuckjet").then(function(data){
    console.log(data);
},function(err){
    console.log(err);
});

上述代码中,首先创建了一个函数getData,该函数返回一个promise实例。在该promise实例中,执行的异步操作代码是访问本地mongodb数据库数据。当请求数据成功时,通过resolve对外传递请求结果。当请求失败时,通过reject对外传递错误信息。
promise.then()接受两个回调函数作为参数,第一个回调函数接收的是请求成功时的数据,即上述代码中resolve(docs)中的doc,第二个回调函数接收的是请求失败时的信息,即上述代码中reject(err)中的err。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18984.html

相关文章

  • ES6Promise

    摘要:什么是使用有什么优势是异步编程的一种解决方案,优势是可以避免层层嵌套的回调。代表一个异步操作,有三种状态进行中已完成,又称和已失败。当请求数据成功时,通过对外传递请求结果。 1.什么是promise?使用promise有什么优势? promise是异步编程的一种解决方案,优势是可以避免层层嵌套的回调。 2.产生背景:在promise出现之前,你肯定写过这样的代码: $.ajax({ ...

    andong777 评论0 收藏0
  • ES6 异步编程二:Promise

    摘要:今天对于处理异步调用已经有了很多成熟的方案,在我看来这些方案都无外乎在解决一个问题如何能看似顺序地传递异步调用的结果,本文要说的就是原生提供的一个解决方案。在对进行叙述之前,依旧引用阮大的入门一书中的章节便于大家更严谨和全面的学习和参考。 异步回调的泥潭 异步回调是最直接的异步结果处理模式,将一个回调函数callback扔进异步处理函数中,当异步处理获得结果之后再调用这个回调函数就可以...

    Gilbertat 评论0 收藏0
  • ES6 系列 Babel 将 Async 编译成了什么样子

    摘要:大约后输出我们直接在官网的粘贴上述代码,然后查看代码编译成什么样子相关的代码我们在系列之将编译成了什么样子中已经介绍过了,这次我们重点来看看函数以上这段代码主要是用来实现的自动执行以及返回。 前言 本文就是简单介绍下 Async 语法编译后的代码。 Async const fetchData = (data) => new Promise((resolve) => setTimeout...

    wangym 评论0 收藏0
  • es6深入理解promise

    摘要:形式非必须,也非必须调用把用函数表示在调用的时候用函数代码更加同步化三是什么异步操作的终极解决方案写法四总结不管用还是用还是用,都保证你写的的返回值是一个对象 一、promise入门 1. Promise对象是什么 回调函数的另一种原生实现,比之前回调函数的写法机构清晰,功能强大, 2.以前回调这么写 function a(fn){ let h = 1; setTime...

    luckyw 评论0 收藏0
  • JS笔记

    摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。异步编程入门的全称是前端经典面试题从输入到页面加载发生了什么这是一篇开发的科普类文章,涉及到优化等多个方面。 TypeScript 入门教程 从 JavaScript 程序员的角度总结思考,循序渐进的理解 TypeScript。 网络基础知识之 HTTP 协议 详细介绍 HTT...

    rottengeek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<