目前,小程序中支持使用async/await有三种模式:
1、不勾选es6转es5,不勾选增强编译;该模式是纯es7的async/await,需要基础库高版本。
2、勾选es6转es5,勾选增强编译;一般是因为调用了第三方的es5插件,通过增强编译支持async/await。
3、勾选es6转es5,不勾选增强编译;手工引入runtime.js支持async/await。
据最近更新情况,原生的函数已经大部分同时原生支持同步化了,不需要本方案转化了,直接加上await即可;比如wx.chooseImage、wx.showModal。。。具体有哪些,可以自己试。
如果只是wx.request的同步化,可参考:
https://developers.weixin.qq.com/community/develop/article/doc/0004cc839407a069f77a416c056813
app.js代码:
function promisify(api) {
return (opt, ...arg) => {
return new Promise((resolve, reject) => {
api(Object.assign({}, opt, { success: resolve, fail: reject }), ...arg)
})
}
}
App({
globalData: {},
chooseImage: promisify(wx.chooseImage),
request: promisify(wx.request),
getUserInfo: promisify(wx.getUserInfo),
onLaunch: function () {
},
})
某page的index.js代码:
const app = getApp()
testAsync: async function(){
let res = await app.chooseImage()
console.log(res)
res = await app.request({url:'url',method:'POST',data:{x:0,y:1}})
console.log(res)
},
果然课博(刻薄) 还收费
onCloudCheck:async function (){ let cloudOpenId = await this.onGetCloudOpenid(); console.log(' [cloudOpenId]',cloudOpenId) }, onGetCloudOpenid:function() { var getCloudOpenId wx.cloud.callFunction({ name: 'login', data: {}, success: res => { getCloudOpenId = res.result.event.userInfo.openId return getCloudOpenId }, fail: err => { } }) return getCloudOpenId },
用了第二种方法为什么还是异步……
https://developers.weixin.qq.com/community/develop/article/doc/000a0aed14c3285bea79e67ee56813
兄弟,这段代码我有两个小小的疑惑。api是传入promise的函数,它的四个参数是哪来的?另外,第一层return有什么用啊?我看了半天的promise,copy你的代码能成功实现同步,但是原理不太懂,能麻烦你讲解一下嘛?
补充:第三种模式的用法:
https://developers.weixin.qq.com/community/develop/doc/000cca349c400084c5e77058c5b404
看代码,好像是只返回了请求成功的参数,如果请求失败会怎样?返回空吗
想问下 取消 es6转es5 ,为啥控制台报错:module "app.js" is not defined?
//小程序端的async/await的两类函数:callback和promise/then //请指教 func1: async function(){ //小程序端的async/await的两类函数:callback和promise/then lca = await func11(); lca = await func12(); function func11(){ // callback return new Promise((resolve, reject)=>{ wx.getLocation({type: 'wgs84',success:res=>{resolve(res)}}) }) } function func12(){ // then(promise) db1.collection('col1').aggregate() .project({name: true}) .end() .then(res =>{return res}) } }
不好意思 看了半天尝试还是没弄好,请问
const db = await app.db.database();
db.collection('business').
这种应该怎么写,因为看到上面都是requst的
不处理错误吗?
跟开发工具版本有关系吗,我的报错,我的版本是RC v1.02.1910121