cocos creator和微信云函数异步问题二则

针对cocos creator远程加载图片,网上提供很多方法现在都过时了,如果使用不是报错就是无法编译通过,因为现在最新是3.7.2,所以折腾了下,把正确方法总结了下。另一个问题是在微信云函数中如何实现异步访问网络api,本以为很简单,在实际中遇到一个问题顺便解决了。

一、远程图片加载

网上给出的方法基本都有问题,经过反复测试,具体成功代码如下:

assetManager.loadRemote(res.avatarUrl, { ext: '.png' }, (err: any, asset: ImageAsset) => {
                        //资源加载成功
                        if (err === null) {
                            this.avatarUrl.spriteFrame =         
                                      SpriteFrame.createWithImage(asset);
                        }

                    });

很简单,但有个ext参数很重要,不然无论如何都出错!这里res.avataUrl为图片头像地址,你可以更换为任意url,this.avataUrl为显示头像的sprite。可以根据实际内容更换。

二、微信云函数实现同步网络api访问

在云托管里可以异步返回,所以可以在代码中异步设置网络返回内容,这个具体根据语言和web服务决定。在云函数中不一样,是通过main函数返回值决定返回内容。网上提供的方法都是wait/async组合解决,但在我的实际问题中,简单加上wait无效。实际上调用后立即返回了,没有等待函数结束,经过反复测试,发现因为编码原因,在函数调用链上异步调用层次比较多一些。如果只在最外层使用wait和async组合,导致无法完全等待。

所以解决办法就是:所有调用链涉及的异步函数和调用部分,全部要改造。就是所有函数改为async前缀,调用部分加wait关键字。如main函数调用functionA,functionA调用functionB,在functionB中有异步调用实现,这样functionA,functionB都必须加上async关键字;main调用functionA和funcitonA调用functionB的部分都必须加wait参数。

export async function main(event: any, context: any) {
	let rc = {};
    await functionA( (res) => {
         rc = res;
    });
    return rc;
}

public async functionA( successCallback: (res: any) => void = null){
    await functionB(successCallback);
}

public async functionB(successCallback: (res: any) => void = null){
    await otherAsyncfunction(successCallback);/*异步调用其他函数*/
}

下面是我的游戏示例,大家可以试试:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值