如何用async、await将wx.login封装成同步执行的?
发布于 6 年前 作者 fsun 8293 次浏览 来自 官方Issues

如题,进行的项目需要登录进入第一个页面之前就需要使用该用户的信息来展示各种数据,但是wx.login是异步的,下面的获取openid和session_id我已经改成了await请求了,但是,这个wx.login就不知道怎么去改了,在这里先附上我获取openid的函数和调用方法,希望大神帮忙解答,谢谢

//这是封装的方法
login:async function(code){
		let res = await request({url:'https://www.ceshi.com/ceshi/ceshi/login',data:{code},method:'post'})
		return res
}
下面是在onlaunch中使用
let info = await this.login(code)
console.log(info)
console.log('aaa')
//这样请求的话,就会先输出info的内容,再出书aaa字符串了,但是wx.login()要怎么封装才行啊,抓狂!!!!
2 回复

https://developers.weixin.qq.com/community/develop/doc/00082e3f538f704848a717f9d5c804

谢谢这位大神,从他的帖子中找到了答案,promisify.js文件可以在他的代码片段中获得,我附上我的app.js

import regeneratorRuntime from './service/runtime.js'
import request from './service/network.js'
const promisify = require('./service/promisify.js');
const login = promisify(wx.login)
App({
  onLaunch:async function () {
		const code = await login()
		let info = await this.login(code.code)
		console.log(info)
  },
  globalData: {
    userInfo: null
  },
	login:async function(code){
		let res = await request({url:'https://www.ceshi.com/ceshi/ceshi/login',data:{code},method:'post'})
		return res
	},
})
function wxLogin(){
  return new Promise(function(reslove,reject){
    wx.login({
      success (res) {
        reslove(res.code);
      }
    })
  })
}
var code = await wxLogin();
var info = await this.login(code);
回到顶部