小程序promise解决地狱回调及封装请求

1.promise解决地狱回调:

vscode中:

小程序中:

// pages/promise/promise.js

Page({

    /**

     * 页面的初始数据

     */

    data: {

    },

    /**

     * 生命周期函数--监听页面加载

     */

    onLoad: function (options) {

        this.promiseFn()

            .then(data => {

                /*  console.log(data); */

                return data;

            })

            .then(data2 => {

                console.log(data2);

                return data2

            })

            /* 使用catch来接收错误信息 */

            .catch(err => {

                console.log(err);

            })

            .then(data3 => {

                console.log(data3);

                return data3

            })

    },

    promiseFn: function () {

        /* 使用promise封装请求 */

        /* 返回一个promise实例化对象 */

        return new Promise((resolve, reject) => {

            wx.request({

                url: 'url',

                success: (res) => {

                    resolve(res.data)

                },

                fail: (err) => {

                    reject(err)

                }

            })

        })

    },

    /**

     * 生命周期函数--监听页面初次渲染完成

     */

    onReady: function () {

    },

    /**

     * 生命周期函数--监听页面显示

     */

    onShow: function () {

    },

    /**

     * 生命周期函数--监听页面隐藏

     */

    onHide: function () {

    },

    /**

     * 生命周期函数--监听页面卸载

     */

    onUnload: function () {

    },

    /**

     * 页面相关事件处理函数--监听用户下拉动作

     */

    onPullDownRefresh: function () {

    },

    /**

     * 页面上拉触底事件的处理函数

     */

    onReachBottom: function () {

    },

    /**

     * 用户点击右上角分享

     */

    onShareAppMessage: function () {

    }

})

2.封装请求的方法:


简易登录页项目练习:

登录页内容:

wxml部分:

<view class="main">

<view class="title">欢迎来到我的书城</view>

    <van-cell-group>

    <van-field model:value="{{ email }}"

     required clearable label="邮箱"

      icon="question-o"

       placeholder="请输入邮箱" 

       bind:change="emailChange" 

       error-message="{{errEmail}}" />

    <van-field model:value="{{ pwd }}"

     type="password" 

     label="密码" 

     placeholder="请输入密码" 

     required border="{{ false }}" 

     bind:change="pwdChange" 

     error-message="{{errpassword}}" />

</van-cell-group>

</view>

<view class="btn-sty">

    <van-button round type="primary" bindtap="login">登录</van-button>

    <van-button round type="info" class="register">注册</van-button>

</view>

wxss部分:

/* pages/denglu/denglu.wxss */

.btn-sty{

  margin: 20px;

  text-align: center;

}

.register{

    margin-left: 20px;

}

.main{

    margin-top: 10px;

}

.title{

    text-align: center;

    padding: 20px;

    padding-top: 0px;

    font-size: 30px;

    color: #1989FA;

}

js部分:

// pages/denglu/denglu.js

const {loginHttp} = require('../../http/api')

Page({

    /**

     * 页面的初始数据

     */

    data: {

        email:'',

        pwd:'',

        errEmail:'',

        errpassword:''

     },

    login:function(){

    if(this.data.email==''){

        this.setData({

            errEmail:'邮箱不能为空'

        })

       return

    }

    if(this.data.pwd==''){

        this.setData({

            errpassword:'密码不能为空'

        })

        return

    }


    loginHttp('/api/auth/login',{email:this.data.email,password:this.data.pwd},'POST')

    .then(res=>{

        console.log(res);

        console.log('正常渲染画面');

        let {access_token} = res;

        wx.setStorageSync('token', access_token)

        wx.switchTab({

          url: '/pages/home/home',

        })

    })

    .catch(err=>{

        console.log(err);

        console.log('页面被外星人抓走了');

    })

    },

    /* emailChange:function(e){

      this.setData({

          email:e.detail

      })

    },

    pwdChange:function(e){

      this.setData({

        pwd:e.detail

      })

    }, */

    onChange(event) {

        // event.detail 为当前输入的值

        console.log(event.detail);

      },

    /**

     * 生命周期函数--监听页面加载

     */

    onLoad: function (options) {

        loginHttp('/api/auth/login',{email:'test@a.com',password:'123123'},'POST')

    .then(res=>{

        console.log(res);

    })

    .catch(err=>{

        console.log(err);

        console.log('页面被外星人抓走了');

    })

    },

    /**

     * 生命周期函数--监听页面初次渲染完成

     */

    onReady: function () {

    },

    /**

     * 生命周期函数--监听页面显示

     */

    onShow: function () {

    },

    /**

     * 生命周期函数--监听页面隐藏

     */

    onHide: function () {

    },

    /**

     * 生命周期函数--监听页面卸载

     */

    onUnload: function () {

    },

    /**

     * 页面相关事件处理函数--监听用户下拉动作

     */

    onPullDownRefresh: function () {

    },

    /**

     * 页面上拉触底事件的处理函数

     */

    onReachBottom: function () {

    },

    /**

     * 用户点击右上角分享

     */

    onShareAppMessage: function () {

    }

})

json部分:

{

  "navigationBarTitleText": "登录页面",

  "usingComponents": {

    "van-cell": "@vant/weapp/cell/index",

    "van-cell-group": "@vant/weapp/cell-group/index",

    "van-field": "@vant/weapp/field/index",

    "van-button": "@vant/weapp/button/index"

  }

}

效果图:


首页内容:

wxml部分:

<MySwiper slides="{{slides}}"/>

<ListItem itemList="{{itemList}}"></ListItem>

JSON部分:

{

  "usingComponents": {

    "MySwiper":"/components/MySwiper/MySwiper",

    "ListItem":"/components/ListItem/ListItem"

  },

  "navigationBarTitleText": "首页"

}

JS部分:

// pages/home/home.js

const {indexHttp} = require('../../http/api')

Page({

    /**

     * 页面的初始数据

     */

    data: {

        slides:{},

        itemList:[]

    },


    /**

     * 生命周期函数--监听页面加载

     */

    onLoad: function (options) {

        indexHttp('/api/index',{},'GET')

        .then(res=>{

            let {slides,goods:{data}} = res;

            this.setData({slides,itemList:data})

            console.log(res);

        })

        .catch(err=>{

            console.log(err);

        })

    },

    /**

     * 生命周期函数--监听页面初次渲染完成

     */

    onReady: function () {

    },

    /**

     * 生命周期函数--监听页面显示

     */

    onShow: function () {

    },

    /**

     * 生命周期函数--监听页面隐藏

     */

    onHide: function () {

    },

    /**

     * 生命周期函数--监听页面卸载

     */

    onUnload: function () {

    },

    /**

     * 页面相关事件处理函数--监听用户下拉动作

     */

    onPullDownRefresh: function () {

    },

    /**

     * 页面上拉触底事件的处理函数

     */

    onReachBottom: function () {

    },

    /**

     * 用户点击右上角分享

     */

    onShareAppMessage: function () {

    }

})

组件MySwiper:

wxml部分:

<!--components/MySwiper/MySwiper.wxml-->

<swiper indicator-dots="{{indicatorDots}}" 

autoplay="{{autoplay}}" 

interval="{{interval}}" 

duration="{{duration}}" 

circular="{{circular}}">

    <block wx:for="{{slides}}" wx:key="*this">

        <swiper-item>

            <view class="swiper-item" bindtap="goTo" data-url="https://www.bilibili.com/video/BV1ub4y1x7FT?spm_id_from=333.337.search-card.all.click">

                <image src="{{item.img_url}}" class="img-sty"></image>

            </view>

        </swiper-item>

    </block>

</swiper>

wxss部分:

/* components/MySwiper/MySwiper.wxss */

swiper,.img-sty{

    width: 100%;

    height: 180px;

}

JS部分:

// components/MySwiper/MySwiper.js

Component({

    /**

     * 组件的属性列表

     */

    properties: {

        slides:{

            type:Array,

            value:[{img_url:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg9.51tietu.net%2Fpic%2F2019-091213%2Fnxbrhvkcwp2nxbrhvkcwp2.jpg&refer=http%3A%2F%2Fimg9.51tietu.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1648601547&t=70234d4610ef4197e14ee30741978e97'}, {img_url:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg9.51tietu.net%2Fpic%2F2019-091010%2F1pqhjsj1pdh1pqhjsj1pdh.jpg&refer=http%3A%2F%2Fimg9.51tietu.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1648601547&t=9dccfb1177457d4f7fd353d98585935d'}, {img_url:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg9.51tietu.net%2Fpic%2F2019-091023%2Fhrhi1fi1vhbhrhi1fi1vhb.jpg&refer=http%3A%2F%2Fimg9.51tietu.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1648601547&t=e3e4ade551143711f2ce593b96e0cb30'}]

        }

    },

    /**

     * 组件的初始数据

     */

    data: {

        indicatorDots: true,

        vertical: false,

        autoplay: true,

        interval: 2000,

        duration:500,

        circular:true,

    },

    /**

     * 组件的方法列表

     */

    methods: {

        goTo(e){

            let {currentTarget:{dataset:{url}}} = e;

            wx.navigateTo({

              url: '/pages/web/web?url='+url,

            })

        }

    }

})

组件ListItem:

wxml部分:

<!--components/ListItem/ListItem.wxml-->

<block wx:for="{{itemList}}" wx:key="index">

    <view class="flex item" bindtap="go" data-url="{{item.cover_url}}">

    <image class="img1" src="{{item.cover_url}}"></image>

    <view class="row">

        <view class="title">

            {{item.title}}

        </view>

        <view class="dec van-multi-ellipsis--l2">

            {{item.description}}

        </view>

    </view>

</view>

</block>

wxss部分:

/* components/ListItem/ListItem.wxss */

@import '/miniprogram_npm/@vant/weapp/common/index.wxss';

.flex{

    display: flex;

  }

.item{

    padding:5px;

}

.img1{

    width: 120px;

    height: 120px;

    display: block;

    border-radius: 5px;

}

.row{

    flex:1;

    height: 120px

}

.title{

    padding:10px;

    text-overflow:ellipsis;

    display: -webkit-box;

    -webkit-line-clamp: 1;

    word-break: break-all;

    -webkit-box-orient: vertical;

    height: 14px;

    overflow: hidden;

}

.dec{

    padding: 0 10px;

}

JS部分:

// components/ListItem/ListItem.js

Component({

    /**

     * 组件的属性列表

     */

    properties: {

        itemList:{

            type:Array,

            value:{}

        }

        /* rItem:{

            type:Object,

            value:{

                url:'https://www.enterdesk.com/face/96790.html',

                imageUrl:"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_360_360%2F80%2F4b%2Fb5%2F804bb51279b3f24270e275e0b8cc9395.jpeg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1648446790&t=402c74db5512e66fcbbf8a0493275401",

                title:"皮卡丘",

                content:"十万伏特十万伏特十万伏特十万伏特十万伏特十万伏特十万伏特十万伏特十万伏特"

            }

        } */

    },

    /**

     * 组件的初始数据

     */

    data: {

    },

    /**

     * 组件的方法列表

     */

    methods: {

        go(e){

            let url = e.currentTarget.dataset.url;

            wx.navigateTo({

              url: '/pages/web/web?url='+url,

            })

        }

    }

})

app.JSON配置tabBar部分:

{

    "pages": [

        "pages/denglu/denglu",

        "pages/home/home",

        "pages/promise/promise",

        "pages/index/index",

        "pages/logs/logs",

        "pages/web/web"

    ],

    "window": {

        "backgroundTextStyle": "light",

        "navigationBarBackgroundColor": "#fff",

        "navigationBarTitleText": "Weixin",

        "navigationBarTextStyle": "black"

    },

    "tabBar": {

        "color": "#000",

        "selectedColor": "#fff",

        "backgroundColor": "#ccc",

        "list": [

            {

                "pagePath": "pages/home/home",

                "text": "首页",

                "iconPath": "/img/1.png",

                "selectedIconPath": "/img/4.png"

            },

            {

                "pagePath": "pages/logs/logs",

                "text": "日志",

                "iconPath": "/img/3.png",

                "selectedIconPath": "/img/4.png"

            }

        ]

    },

    "usingComponents": {

        "van-button": "@vant/weapp/button/index"

    },

    "sitemapLocation": "sitemap.json"

}

跳转的web部分:

wxml部分:

<web-view src="{{url}}"></web-view>

JS部分:

// pages/web/web.js

Page({

    /**

     * 页面的初始数据

     */

    data: {

     url:''

    },

    /**

     * 生命周期函数--监听页面加载

     */

    onLoad: function (options) {

    this.setData({

        url:options.url

    })

    },

    /**

     * 生命周期函数--监听页面初次渲染完成

     */

    onReady: function () {

    },

    /**

     * 生命周期函数--监听页面显示

     */

    onShow: function () {

    },

    /**

     * 生命周期函数--监听页面隐藏

     */

    onHide: function () {

    },

    /**

     * 生命周期函数--监听页面卸载

     */

    onUnload: function () {

    },

    /**

     * 页面相关事件处理函数--监听用户下拉动作

     */

    onPullDownRefresh: function () {

    },

    /**

     * 页面上拉触底事件的处理函数

     */

    onReachBottom: function () {

    },

    /**

     * 用户点击右上角分享

     */

    onShareAppMessage: function () {

    }

})

效果图:


详情可参考:

vant组件:https://youzan.github.io/vant-weapp/#/button

微信小程序官方教学:https://developers.weixin.qq.com/miniprogram/dev/component/


张sir手摸手详细教学:https://www.bilibili.com/video/BV1ub4y1x7FT?spm_id_from=333.337.search-card.all.click




©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容