微信小程序如何进行异步处理

本篇文章介绍了微信小程序开发中异步处理的方法,希望对学习微信小程序开发的朋友有帮助!

微信小程序如何进行异步处理

微信小程序是通过wx.request进行异步处理,使用起来确实有很多不方便,不能忍,幸好小搭建项目系统点我wcqh.cn程序是支持ES6语法的,所以可以使用promise稍加改造。

推荐学习:小程序开发

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Page({

data: {

myData搭建项目系统点我wcqh.cn:

},

// loadMyData函数用于打印myData的值

loadMyData () {

console.log(获取到的数据为: + this.data.myData)

},

// 生命周期函数onlo搭建项目系统点我wcqh.cnad用于监听页面加载

onload: function () {

wx.request({

url: https://api,

// 某个api接口地址

success: res => {

console.log搭建项目系统点我wcqh.cn(res.data)

this.setData({

myData: res.data

})

console.log(this.data.myData)

}

})

// 调用之前的函数

this.loadMyData(搭建项目系统点我wcqh.cn)

}

})

登录后复制

然后我们会在控制台到这样的结果:

这其实是一个很简单的异步问题,wx.request是异步请求,JS不会等待wx.request执行完毕再往下执行,所以JS按顺序会先执行this.lo搭建项目系统点我wcqh.cnadMyData(),等服务器返回数据以后,loadMyData()早就执行完了,当然也就没有拿到值啦。

其实我们在同步流程中才说“返回”,异步没有“返回”这个概念(或者说异步返回是没有意义的),异步对搭建项目系统点我wcqh.cn应的是“回调”,也就是说,对于一个异步函数,我们应该传入一个“回调函数”来接收结果。

初步解决:通过回调接收结果

最简单的解决方案,就是把需要使用异步数据的函数写在回调里:

1

2

3

4

5

6

7

8

9

10

11

12

1搭建项目系统点我wcqh.cn3

14

15

onload: function () {

wx.request({

url: https://api,

// 某个api接口地址

success: res => {

console.log(res.搭建项目系统点我wcqh.cndata)

this.setData({

myData: res.data

})

console.log(this.data.myData)

// 把使用数据的函数写在回调函数success中

this.load搭建项目系统点我wcqh.cnMyData()

}

})

}

登录后复制

而我们发现,微信小程序的网络请求wx.request,也正是这种依靠回调函数的形式,类似于以前的$.ajax,它在逻辑复杂、页面执行顺序要求多的情况下,弊端也是很明显搭建项目系统点我wcqh.cn的。不过好在小程序支持ES6,我们可以尽情地拥抱Promise!

使用Promise包装wx.request

Promise这东西简单说来就是,它可以将异步的执行逻辑和结果处理分离,摒弃了一层又一层的回调搭建项目系统点我wcqh.cn嵌套,使得处理逻辑更加清晰。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/**

* requestPromise用于将wx.request改写成Promise方式

* @param:{string} m搭建项目系统点我wcqh.cnyUrl 接口地址

* @return: Promise实例对象

*/

const requestPromise = myUrl => {

// 返回一个Promise实例对象

return new Promi搭建项目系统点我wcqh.cnse((resolve, reject) => {

wx.request({

url: myUrl,

success: res => resolve(res)

})

})

}

// 我把这个函数放在了utils.j搭建项目系统点我wcqh.cns中,这样在需要时可以直接引入

module.exports = requestPromise

登录后复制

现在再使用试试:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 引用模块

const uti搭建项目系统点我wcqh.cnlApi = require(../../utils/util.js)

Page({

// 生命周期函数onload用于监听页面加载

onLoad: function () {

utilApi.requ搭建项目系统点我wcqh.cnestPromise(https://www.bilibili.com/index/ding.json)

// 使用.then处理结果

.then(res => {

console.log(res.data搭建项目系统点我wcqh.cn) this.setData({

myData: res.data

})

console.log(this.data.myData)

this.loadMyData()

})

}

})

登录后复制

结果和使用回调函数一搭建项目系统点我wcqh.cn致。当有多个异步请求时,直接不断地.then(fn)去处理即可,逻辑清晰。

当然,这里只是写了一个最简单的Promise函数,还不完整。更完整的Promise化wx.request,等以后业务需要再完善搭建项目系统点我wcqh.cn吧。另外各种小程序开发框架也都有了现成的promise化API,拿来即用。

PHP中文网,大量编程教程和网站建设教程,欢迎学习!

以上就是微信小程序如何进行异步处理的详细内容,更多请关注php中文网其它相搭建项目系统点我wcqh.cn关文章!

© 版权声明
THE END
喜欢就支持一下吧
点赞628 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容