发个扫盲贴,大神请绕道。最近好多同学问我如何再请求数据成功后直接使用数据。我们通常的做法就是在请求成功后,再调用我们定义的方法,进而使用数据。如下代码

  onLoad() {let that=thiswx.cloud.database().collection("users").get({success(res) {that.setData(res.data)},fail(res) {}})},showData(dataList) {//.........做数据处理},

我们这样写其实也没什么不对,但是如果数据请求和使用是在两个不同的页面呢。 比如我们在app.js里请求位置,获取用户信息。然后在首页index.js里要使用这些数据,那么我们这么写就有问题了。下面就来教大家两种方式来很好的解决这个问题。

一,通过callback回调。

先看下代码,然后我再具体给大家讲解下原理。

  • app.js里定义如下方法
  • 然后再index.js 里这么使用
    这时候,其实就可以看到了,我们在首页index.js里调用了app.js里的请求数据的方法,并且可以在index.js里直接使用数据。

原理讲解

原理其实很简单,就是我们在app.js里的获取数据的方法里定义一个参数。而这个参数和普通参数唯一不同的地方,就是这个参数是个function方法

我们上图的callback参数,其实就是下图 function(result){}

把function方法作为一个参数传递进去的目的,就是为了下面的回调。

我们这个callBack参数,可以在请求数据成功或者失败的时候作为一个方法调用。这样就可以把请求到的数据,回传回去了。
讲的有点绕,不知道大家有没有被绕晕。这在java开发中,其实就相当于监听者模式。说白了就是在一个页面里监听另外一个页面的动作,如获取数据成功,当监听到数据获取成功这个动作以后,就可以直接把数据回传回来了。
如果觉得这种方法有点绕,不好使用,我们就用下面的这个第二种方式。

二,promise

promise的好处就是可以不用那个层层传递,不用那么绕。 还是先看代码,后面结合代码给大家讲下原理
app.js里定义如下方法

index.js里这么调用

用句通俗的话说,就是通过promise让我们的数据请求和使用看上去是在同一个页面完成。怎么实现的呢

  • 1,在app.js里把数据请求封装到promise里,然后把promise返回到我们的首页index.js里
  • 2,在首页里使用这个promise 实现数据的获取和使用。
    在具体些就是下面这几步

promise基础用法

  • 1、new 一个Promise对象
  • 2、请求数据的异步代码写在promise的函数中
  • 3、promise接受两个参数,一个resolve(已成功success),一个reject(已失败fail)
  • 4、promise有三种状态pendding(进行中,当new了promise就是pendding的状态)、fulfilled(已成功)、rejected(已失败),当成功的时候调用resolve将状态改为已成功,当失败的时候调用reject将状态改为已失败,一旦状态发生改变之后,状态就凝固了,后面就无法改变状态了,成功会将成功的数据返回,失败会将失败的信息返回。
  • 5、在需要获取数据的地方通过promise.then()的方式获取,这里面接受两个参数,都是匿名函数,第一个是接受成功的函数,第二个是失败时候的函数

好了,到这里我们两种不同页面的异步回调就给大家将完了。代码就完整的给大家贴出来吧,方便大家日后使用

  • app.js
//app.js
App({//第二种,通过promisepromiseGetData() {let promise = new Promise(function(success, fail) {wx.cloud.database().collection("users").get({success(res) {success(res)},fail(res) {fail(res)}})})return promise;},//第一种,通过callback的方式来实现回调callBackGetData(callBack) {wx.cloud.database().collection("users").get({success(res) {callBack(res)},fail(res) {callBack(res)}})},
})

  • index.js
// 异步调用,callback
const app = getApp()
Page({clickBtn() { //按钮点击//callback方式// app.callBackGetData(function(result) {//   console.log("dataList", result)// })//promise方法let promise = app.promiseGetData()promise.then((res) => { //获取成功的结果,res中存着获取成功时的数据console.log("成功", res)}, (error) => { // 获取数据失败时console.log("失败", error)})},
})

callback函数_小程序不同页面的异步回调,callback和promise的使用讲解相关推荐

  1. 小程序云函数获取用户昵称_小程序云开发云函数进阶

    " 云函数(官方文档说明) 云函数即在云端(服务器端)运行的函数.在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源:各云函数完全独立:可分别部署在不同的地区.开 ...

  2. 微信小程序页面栈_微信小程序之页面传值(路由、页面栈、globalData、缓存)

    1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: 点此进入 detail detail页面取值: onLoa ...

  3. 参数 携带 跳转_微信小程序:页面跳转及参数传递

    本文首发自个人自有博客:[FaxMiao个人博客],一个关注Web前端开发技术.关注用户体验.记录前端点滴,坚持更多原创,为大家提供高质量技术博文! 前言 小程序的跳转方法有很多种,有的人一直只用wx ...

  4. 如何让小程序页面更顺滑_小程序怎样让wx.navigateBack更好用的方法实现

    相信只要开发过小程序,对wx.navigateBack 这个 api都不会陌生.在摩拜单车的小程序中,它也被改造的更方便满足复杂的业务需求,可谓之 增强型的 wx.navigateBack. 先来看看 ...

  5. 微信小程序_小程序开发框架

    微信小程序_小程序开发框架 微信小程序框架 微信小程序小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 框架提供了自己的视图层描述语言WXML和WXS ...

  6. js中怎么获取某个属性的值_小程序中 setData 详解

    前言 在小程序中各个页面之间是相互独立的,一个页面分为渲染层(视图层 webview),逻辑层(JavaScript),系统层(底层),在架构上,WebView和 JavascriptCore 都是独 ...

  7. 小程序自定义分享事件及回调函数

    定义函数 在页面的js文件中定义 onShareAppMessage 函数时,表示该页面可以进行转发.可以在函数中设置页面转发的信息. 只有定义了该函数,小程序右上角的菜单中才会有转发按钮 用户点击转 ...

  8. web api接口开发实例_小程序开发如何调用 API 接口,以豆瓣电影为例

    API 调用是开发者在小程序开发过程中经常会遇到的问题,本期我们以为调用豆瓣电影 API 为例具体来看 API 的调用过程以及常见的一些问题. 测试用到的小程序是「电影周周看」,内容来自清华大学软件学 ...

  9. nohup的程序能不能再转到前台查看啊?_小程序开发之路入门

    一. 准备工作 1. 注册一个微信小程序 https://mp.weixin.qq.com/ 注册页面.png 2. 微信小程序的开发工具下载地址 https://developers.weixin. ...

最新文章

  1. 在Visual Studio中启用对jquery等javascript框架的智能感知
  2. access 一亿条数据_循环运算数据溢出
  3. jQuery 表格自动增加
  4. spring的view
  5. .NET异步程序设计之任务并行库
  6. 仿minecraft游戏 linux,【图片】【Codea制作仿MineCraft3D游戏】Craft Ver. 0.1发布(开源)【codea吧】_百度贴吧...
  7. Linux运维-day3
  8. 关于TCP协议的大部分,面试常问的几点都在这理里了
  9. 现如今有一个很有意思的现象,不管是工厂还是经销商
  10. Nokia Booklet 3G试用小记
  11. cxgrid定位在第一行并显示内置编辑器
  12. LwIP协议栈之ARP(Address Resolution Protocal)协议详解
  13. Excel高级图表实现
  14. Python使用pyodbc访问数据库操作方法详解
  15. 小型网络游戏实例(vc++)——网络五子棋
  16. 乐高大颗粒作品24:金蟾
  17. Java的运行机制(一)
  18. 实验环境的搭建以及异或门的设计仿真实验
  19. matlab绘制收益率曲线并计算风险收益率VaR(Value At Risk)
  20. Laragon 开机启动自启创建失败

热门文章

  1. 北斗b2频点频率_北斗系统中“三”的奥秘
  2. composer 安装包时与php版本不符 提示报错
  3. solr简介——(九)
  4. Android下基于线程池的网络访问基础框架
  5. JQ focus blur focusin focuseout
  6. 带下划线的二级域名IE无法读取session
  7. mysql学习之路三(转)
  8. 编译内核模块找不到内核头文件解决办法
  9. 用配置还用Attribute来实现IoC?
  10. C# 调用Excel组件生成excel文件