微信小程序写同步promise的最简单方法

第一次写微信小程序,被异步坑死了,异步是哪个运行的快就先运行了, 运行慢的慢慢运行完,所以根本不能按照程序编写顺序一步步运行正确。

在网上找了好久介绍,Async-await,Promise什么的,弄不清楚具体怎么写,后来终于弄清楚了,按顺序运行的Promise模板格式其实很简单!原理抛开,引用抛开,没有var。如下:

//new Promise模板
new Promise((resolve, reject) => {
	resolve(a)
}).then(res => {

})

模板之外不需要写另外的引用了,复杂的需要注意放resolve的位置,resolve表示传运行成功后的值a给then用。

例如云数据库数据一次只能查20个,需要循环查询再用concat拼合数组,但因为for异步,查询数据库总是慢的不一致,就导致按顺序查询出来的在拼合时乱了顺序,还需要全拼合完了再排序。因此需要用Promise确保查询完了,再resolve传递数组去排序。

上例提取可运行的代码片段展示太麻烦,就举个特简单的例子:

例如第一步是:

stepone: function() {
    console.log('stepone')
     this.setData({
       a: true
     })
     console.log('a1',this.data.a)
},

第二步是:

steptwo: function(b) {
    console.log('steptwo')
    if (b){
    	console.log('a2',b)
    }
},

第二步需要第一步的a值,因为有先后顺序的要求,可套进模板,如下:

new Promise((resolve, reject) => {	
	console.log('第一步')
	this.stepone()
	resolve(that.data.a)	
}).then(res => {
	//res就是resolve传过来的that.data.a,都可以用
	console.log('传值res',res)
	console.log('第二步')
	this.steptwo(res)
})

还不清楚上面代码放哪,看完整的JS(我这个新手就希望看到这么简单的o(╥﹏╥)o):

Page({
  data: {
    a: false,
  },
  /**
   * 生命周期函数onLoad--监听页面加载
   */
  onLoad: function(options) {
    new Promise((resolve, reject) => {
      console.log('第一步')
      this.stepone()
      resolve(this.data.a)
    }).then(res => {
      //res就是resolve传过来的that.data.a,都可以用
      console.log('传值res', res)
      console.log('第二步')
      this.steptwo(res)
    })  
  },

  stepone: function () {
    console.log('stepone')
    this.setData({
      a: true
    })
    console.log('a1', this.data.a)
  },

  steptwo: function (b) {
    console.log('steptwo')
    if (b) {
      console.log('a2', b)
    }
  },

})

运行后截图:
new Promise简单示例运行结果
OK,分享完ヾ(◍°∇°◍)ノ゙
其实还有摸索微信小程序的经验可以给我这样第一次接触JS的小白。。但整理分享我会抠细节,太累了(❁´ω`❁)但超级想分享啊~

  • 28
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值