2018-03-10 Promise

在JavaScript的世界中,所有代码都是单线程执行的。导致浏览器的事件,网络操作都是通过回调函数执行的。

//比如

 function done(){

    console.log('事件函数')

}

  setTimeout(done(),1000);

这样的函数虽然达到了想要的效果,但是一但出现多个回调,结构就会非常复杂,代码可维护性就会变差,于是出现了promise对象。

promise译为承诺。接受一个拥有两个参数的函数,一个参数为resolve,指成功执行的方法,另一个为reject,指失败的回调。

//下面是一个简单的例子

//定义一个0-2的随机数,当随机数小于1的时候打印“200 OK”,否则打印失败

function text(resolve,reject) {

            //定义一个0-2的随机数

            var timeout = Math.random() *2;

            console.log('得出的随机数为'+timeout);

            setTimeout(function () {

                if(timeout < 1){

                    resolve("200 ok")

                }else{

                    reject("大于1的数"+timeout)

                }

            }, timeout*1000)

        }

        var p1 = new Promise(text)

        p1.then(function (result) {

            console.log('成功'+result)

        }).then(function (result) {

            console.log('成功2' + result)

        }).catch(function (reason) {

            console.log("失败"+reason)

        })

实际项目中的promise应用

"use strict";

/**

* 查询某条数据

* @param request 请求上下文

* @param where 查询条件

* @param isShow 不希望查询某些字段如查找user时不想查询密码可以传入{password:0}

* 如果只希望看到某些字段{name:1}

*/

exports.findById = function(request,collectionName,id = "",notShow = {}){

    return new Promise(function(resolve, reject){

        var db = request.server.plugins['hapi-mongodb'].db;

        var ObjectID = request.server.plugins['hapi-mongodb'].ObjectID;

        db.collection(collectionName).findOne({"_id":new ObjectID(id)},function(err,result){

            if(err){

                request.server.log(['error'],err);

                throw err;

                resolve(null);

            }else{

                resolve(result)

            }

        });

    });

}

//END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。