小程序使用async/await 来处理异步
regeneratorRuntime
https://github.com/facebook/regenerator/blob/master/packages/regenerator-runtime/runtime.js
详细看代码片段
https://developers.weixin.qq.com/s/FlIPCOmw7P3c
//引入编译模块 const regeneratorRuntime =require("../libs/regeneratorRuntime.js")
const promisify = require('../libs/promisify.js'); //微信 API,转成返回 Promise 的接口 云开发API的有Promise 风格 不需要再转了 const getUserInfo= promisify(wx.getUserInfo); const login = promisify(wx.login); wx.cloud.init();
Page({ data: {
}, onLoad: async function () {
console.log(this)
const user = await getUserInfo(); console.log("onLoad user",user) const code = await login(); console.log("onLoad code",code);
const res = await wx.cloud.database().collection('todos').where({ _openid: 'xxx' }).get(); console.log("onLoad res", res) }, onShow: async function(){ const user = await getUserInfo(); console.log("onshow", user)
} })
|

我赞的我赞的
你好,我在工具类中使用async await 报错,代码片段是:https://developers.weixin.qq.com/s/hlbKnumJ7G5H
你好楼主,在ECMAScript modules中,若在export function中使用await将会导致regeneratorRuntime未定义的问题,原因是生成的代码中require regeneratorRuntime的语句将会被放在export的函数之后。请问可有办法解决?代码:
import regeneratorRuntime from "./libs/regeneratorRuntime.js";
export async function test() {
await new Promise((resolve, reject) =>{
console.log("hello");
})
}
在另一文件调用该函数报错: thirdScriptError
sdk uncaught third Error
Cannot read property 'default' of undefined
TypeError: Cannot read property 'default' of undefined
at http://127.0.0.1:23730/appservice/api.js:9:66
at http://127.0.0.1:23730/appservice/api.js:30:2
at require (http://127.0.0.1:23730/appservice/__dev__/WAService.js:22:26841)
at http://127.0.0.1:23730/appservice/__dev__/WAService.js:22:26448
at http://127.0.0.1:23730/appservice/app.js:5:12
at require (http://127.0.0.1:23730/appservice/__dev__/WAService.js:22:26841)
at <anonymous>:1:1
at HTMLScriptElement.scriptLoaded (http://127.0.0.1:23730/appservice/appservice?t=1550895843471:6969:21)
at HTMLScriptElement.script.onload (http://127.0.0.1:23730/appservice/appservice?t=1550895843471:6981:20)
您好,我遇到了和您相同的问题,请问您后来是如何解决的呢?
先定义一个对象 把方法赋值到对象上
然后再export
var api
api.xxx=async function(){
}
module.exports = api
你试试我回复的看看
怎么实现全局注册,不用每个页面都引用
全局引用app.js//引入模块const regeneratorRuntime = require("libs/regeneratorRuntime.js")const promisify = require('libs/promisify.js');//微信 API,转成返回 Promise 的接口 云开发API的有Promise 风格 不需要再转了const getUserInfo = promisify(wx.getUserInfo);const login = promisify(wx.login);wx.cloud.init( );App({regeneratorRuntime,getUserInfo,login,promisify,onLaunch:function() {}})index.jsconst app = getApp();const regeneratorRuntime = app.regeneratorRuntime;Page({data: {},onLoad: asyncfunction() {console.log(this)const user = await app.getUserInfo();console.log("onLoad user", user)const code = await app.login();console.log("onLoad code", code);console.log("onLoad res", res)},onShow: asyncfunction( ) {const user = await app.getUserInfo();console.log("onshow", user)}})我赞的我赞的
楼主,您好!
我参照了你的写法,但为什么res是undefined?我是用2.4.2基础库
把count里面的 success 去掉
async/await
是依赖于 success 和 fail 等等回调函数 的 返回值
你这样相当于重写了success 导致没有返回值 所以自然未定义
这个问题弄了很久,现在解决了,十分感谢!
为什么从11.17开始,引入runtime实现await和ansync的方法不能用了?你们有遇到吗?
基础库多少 ?
2.4.0
之前使用await没有任何问题,11.17开始就不行了,郁闷啊!
好的 我看看
开发工具测试可以的
有代码片段什么的么
还有。。。如果wx.getUserInfo() fail的时候如何处理,麻烦楼主告知下~谢谢
const user = await getUserInfo()
这个user会返回错误信息的 自己判断一下就可以了
如果地址不对的话 不用try catch会直接报错 后面的代码就不会执行了 你的意思是包一层try catch吗?
const req = promisify(wx.request);const res = await req({url:'https://aaa.bbb'});if(res){console.log('ok',res);}else{console.log('error');}看逻辑 要继续 运行就try cath
好的 感谢
hi 楼主 promisify(wx.request) 这个参数应该怎么传?
// 这么写报错啊
promisify(wx.request({
url: 'asdasdasd'
}))
const request =promisify(wx.request)
const res= await request({
url:'',
data:{}
})
console.log(res);
谢谢~
我赞的我赞的