async是硬需求,那在js里面到底要怎么才能用?

从creator诞生开始就有这样一个问题,当游戏里面需要操控不同的对象做action的时候,由于没有同步的机制,你必须通过不同对象的action所花费的时间来小心的计算排布,这样的代码太过复杂容易出错且无法调试,而async await这样的同步语法一直没有被creator支持,官方所言,你必须使用typescript才能原生支持async await的语法,那么你干脆就让typescript作为creator的原生语法算了。

后来个人通过引用async.js库能达到同步的目的,而且该库实际上在creator里面是内置的,在文档里也有所提及:
https://docs.cocos.com/creator/manual/zh/scripting/plugin-scripts.html?h=async
但是在项目编译到微信小游戏平台的时候却无法通过,报错信息:
WAGame.js:1 gameThirdScriptError
Cannot find module ‘async’
Error: Cannot find module ‘async’
然后在下面这个主题里提到可以用另一个解决方法:
https://forum.cocos.com/t/js-async/67464
但是通过各种方式还是没法用起来,也是同样报找不到模块的错误,这里恳请官方重视这个问题,至少给予原生的js语言一个可以使用同步并能发布到各平台的同步方法,最好是能给出范例项目或者直接在cocos的官方范例集合里面加入同步的范例代码,如有哪位高手有已经能通过的相关范例也肯定不吝赐教,谢谢。

es6,我早就用起来了。

es6?
你的意思是在creator里面可以直接用async await吗?
我是指在不使用typescript的前提下。

(1)安装模块:
初始化package.json:

npm init

安装npm模块:

npm install async --save

(2)使用:
方法1:
直接require进来使用

let async = require("async");

方法2:
将release模块文件直接导入到assets文件夹下,然后勾选做为插件脚本。

2赞

第一步安装模块是在creator里面安装吗?我找了下没有找到npm。

在项目工程目录下

ES6只提供了function *和Promise
async await是ES7的内容

以下个人想法:
尽管ES7异步语法大大增强代码可读性,但在当前游戏GUI编程里不提倡,规模性使用async/await将增加调试复杂性,另一个问题如何定义Promise、实际情况中发生异常是调用resolve还是rejec很多时候是存在讨论的。

谢谢,我再试试promise

在NATIVE 里能用吗

你好,我的项目也使用了这个脚本,同样也勾选为插件脚本(也就是使用了你所提及的方法2),在web和模拟器上测试都没有问题。
但是导出为微信小游戏出现了“Uncaught ReferenceError: async is not defined”的bug。具体截图见这里
请问,这是什么原因的bug?我该如何修复它?

我使用npm安装后就没这个bug了。

用settimeout和interval

话说await有什么用:thinking:,C++好像就没有这样的功能

您好!我也碰到这个问题,怎么解决?求教

:slightly_smiling:

同步的写法去写异步代码

qq389052045,求助发布到微信后提示async is not defined。解决办法

async加载为插件?

加了插件,然而并没有什么用~

win平台又是如何弄

所以你们为啥都不用ts呢?ts有代码提示,类型检查,开发比js方便安全多了啊