ES6之Promise

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://segmentfault.com/a/1190000009225333
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞