小程序使用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.js
const app = getApp();
const regeneratorRuntime = app.regeneratorRuntime;
Page({
data: {
},
onLoad: async
function
() {
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: async
function
( ) {
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);
谢谢~
我赞的我赞的