美文网首页我爱编程
2018-03-10 Promise

2018-03-10 Promise

作者: 鹏举888888 | 来源:发表于2018-03-10 15:13 被阅读0次

    在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

    相关文章

      网友评论

        本文标题:2018-03-10 Promise

        本文链接:https://www.haomeiwen.com/subject/wgxbfftx.html