问一下上面这个如何放在共用方法里面,比如放在app'.js里面,,,然后在页面直接调用init一下,,网上查了试了都报错
能不能贴一下app.js的公用函数代码,还有page.js的调用代码
这是目前的写法,每次都要写一遍前项调用
async getXXX(e) {
// 声明新的 cloud 实例
var c1 = new wx.cloud.Cloud({
resourceAppid: 'xxxxx',
resourceEnv: 'xxxxx',
})
await c1.init()
// 完成后正常使用资源方的已授权的云资源
c1.callFunction({
name: '函数名',
data: {},
})
}
可以看这边描述
// 声明新的 cloud 实例
var c1 = new wx.cloud.Cloud({
// 资源方 AppID
resourceAppid: 'xxxxx',
// 资源方环境 ID
resourceEnv: 'xxxxx',
})
// 跨账号调用,必须等待 init 完成
// init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则
await c1.init()
上面的代码如何放在公用函数里面?
=======================================================
=======================================================
下面的代码,根据对应新建页面,如何调用就初始化一下c1就行
// 完成后正常使用资源方的已授权的云资源
c1.callFunction({
name: '函数名',
data: {},
})
已经解决,感谢大佬@跨商通
我的做法是在一个公共的js中(api.js)中写了一个初始化cloud的方法,在app.js中调用这个初始化方法,然后后续有用到cloud的地方比如调用云函数,也放在api.js中。可以参考一下
api.js
let cloud; //云环境初始化完毕标记 let wxCloudAlreadyInit = false; //云环境初始化完毕回调 const wxCloudInitCallback = []; /** * 初始化云能力 * @returns {Promise<void>} */ const wxCloudInit = async function () { const {cloudBase} = env; if (!wx.cloud) { console.error('请使用 2.2.3 或以上的基础库以使用云能力') } else { if (cloudBase.useShareResource) { const {resourceAppid, resourceEnv} = cloudBase; // 声明新的 cloud 实例 cloud = new wx.cloud.Cloud({ //资源方AppID resourceAppid, //资源方环境ID resourceEnv, }) // 跨账号调用,必须等待 init 完成 // init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则 const initRes = await cloud.init(); console.log("初始化云能力完毕:", initRes, "资源方appid:", resourceAppid, "资源方环境ID:", resourceEnv); } else { await wx.cloud.init({ env: env.activeEnv, traceUser: true }); console.log("初始化云能力完毕,当前环境:", env.activeEnv); cloud = wx.cloud; } wxCloudAlreadyInit = true; } this.cloud = cloud; if (wxCloudAlreadyInit && wxCloudInitCallback.length) { console.warn("存在云环境初始化完毕回调函数,开始执行,函数个数:", wxCloudInitCallback.length); wxCloudInitCallback.forEach(callback => { callback(); }); } } /** * 云函数调用 * @param name * @param data * @param success * @param fail * @param complete */ const callCloudFunction = function (name, data, success, fail, complete) { const func = () => { //执行云函数 cloud.callFunction({ // 云函数名称 name: name, // 传给云函数的参数 data: Object.assign({}, data, {env: env.activeEnv}) }).then(res => { typeof success == 'function' && success(res); }).catch(res => { typeof fail == 'function' && fail(res); }).then(res => { typeof complete == 'function' && complete(res); }); } if (wxCloudAlreadyInit) { func(); } else { wxCloudInitCallback.push(func); } };
app.js
App({ onLaunch: async function (options) { console.log("APP onLaunch=>", options); await api.wxCloudInit(); }});
async getCloud(){ if(this.globalData.cloud) return this.globalData.cloud // 声明新的 cloud 实例 var c1 = new wx.cloud.Cloud({ resourceAppid: 'xxxxx', resourceEnv: 'xxxxx', }) await c1.init() this.globalData.cloud = c1 }, async getXXX(e) { await this.getCloud() // 完成后正常使用资源方的已授权的云资源 this.globalData.cloud.callFunction({ name: '函数名', data: {}, }) }
这个你都不知道啊?