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


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 页面自动加载事件详解
Feb 10 Javascript
Node.js事件驱动
Jun 18 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
Vue自定义指令拖拽功能示例
Feb 17 Javascript
BootStrap表单宽度设置方法
Mar 10 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 Javascript
微信小程序 转发功能的实现
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
第十五节--Zend引擎的发展
2006/11/16 PHP
Smarty+QUICKFORM小小演示
2007/02/25 PHP
坏狼php学习 计数器实例代码
2008/06/15 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
js实现圆形菜单选择器
2020/12/03 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
python相似模块用例
2016/03/04 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
python pandas修改列属性的方法详解
2018/06/09 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
商品陈列协议书
2014/09/29 职场文书
个人贷款收入证明
2014/10/26 职场文书
投诉信格式范文
2015/07/02 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
详解Python函数print用法
2021/06/18 Python