微信小程序 同步请求授权的详解


Posted in Javascript onAugust 04, 2017

微信小程序 同步请求授权的详解

需求分析:

1.在小程序首次打开的时候,我需要同时请求获取多个权限,由用户逐一授权。

([‘scope.userInfo',‘scope.userLocation',‘scope.address',‘scope.record',‘scope.writePhotosAlbum'])

问题分析:

1. wx.authorize接口同时调用,请求多个权限,由于异步原因,将授权请求一并发出,显然不符合要求。

2. promise能很好的解决问题,试着尝试了一下,下面代码分为两个文件。

// scope.js
import es6 from '../helpers/es6-promise'

// 获取用户授权
function getScope(scopeName) {
 return new es6.Promise(function (resolve, reject) {
  // 查询授权
  wx.getSetting({
   success(res) {
    if (!res.authSetting[scopeName]) {
     // 发起授权
     wx.authorize({
      scope: scopeName,
      success() {
       resolve(0)
      }, fail() {
       resolve(1)
      }
     })
    }
   }
  })
 })
}

module.exports = { getScope: getScope }
// index.js
import scope from "../../service/scope"
Page({
onShow() {
  let list = ["scope.userInfo", "scope.userLocation", "scope.address", "scope.record"];
  // 记录请求结果
  let num = 0;
  // 问题1:怎么改成循环方式?
  scope.getScope(list[0]).then(function (res) {
   num += res;
   scope.getScope(list[1]).then(function (res) {
    num += res;
    scope.getScope(list[2]).then(function (res) {
     num += res;
     scope.getScope(list[3]).then(function (res) {
      num += res;
      // 调起设置界面
      if (num) {
       wx.openSetting({
        success(res) {
         // 允许获取用户信息
         if (res.authSetting["scope.userInfo"])
          userService.login()
        }
       })
      } else {
       userService.login()
      }
     })
    })
   })
  })
})

分析求解:

1.代码中问题1写法过于笨,但是尝试通过循环方式调用写法,又不知道如何处理回调问题。

2.wx.authorize接口,success参数官方给出的解释是(接口调用成功的回调函数),其实不然,实际上是接口调用成功,并且获取到了scope指定的权限

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 Javascript
Vue 使用中的小技巧
Apr 26 Javascript
vue结合axios与后端进行ajax交互的方法
Jul 06 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
vue+webpack 更换主题N种方案优劣分析
Oct 28 Javascript
VueJS实现用户管理系统
May 29 Javascript
vue中destroyed方法的使用说明
Jul 21 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 Javascript
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
微信小程序 转发功能的实现
Aug 04 #Javascript
Vue计算属性的使用
Aug 04 #Javascript
JS+Ajax实现百度智能搜索框
Aug 04 #Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 #Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 #Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 #Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 #jQuery
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
生成卡号php代码
2008/04/09 PHP
php合并js请求的例子
2013/11/01 PHP
php中spl_autoload详解
2014/10/17 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
express默认日志组件morgan的方法
2018/04/05 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
vue实现购物车小案例
2019/09/27 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python中itertools模块用法详解
2014/09/25 Python
Python判断Abundant Number的方法
2015/06/15 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python