异步函数

什么是同步执行(sync)?

同步执行就是要等待每一个函数的执行结果,即使是耗时的异步函数(网络请求/数据库操作)也会同步执行,好像马上就能拿到结果一样。同步执行就像过独木桥,你过完桥了我再过。

在众触事件逻辑中几乎所有表达式都是同步执行(按顺序执行)的,即一条表达执行完毕才会开始执行下一条,即使是耗时的操作也如此。同步执行保证了下一条表达式执行的时候上一条表达式已经执行完毕,也就能知道上一条表达式的执行结果。比如:

$product.search()
$v.商品列表 = $r.arr

执行第二行的时候第一行的表达式已经完成,用$r来表示上一行表达式的返回值(数据库搜索结果)。甚至可以这么写:

$v.商品列表 = $product.search().arr

异步函数是要花一段时间才能拿到值的,但使用起来好像马上就能拿到值一样。这样符合人类的直觉,使用简单,减少心智负担。

什么是异步执行(Async)?

异步执行就是不等待异步函数的执行结果,马上执行下一条表达式,所以无法获取异步函数的返回值。异步执行就有多条桥,你过你的桥我过我的桥;互不等待,互不干扰。

同步执行虽好,但也不是没有缺点的,有时候它的优点就会成为缺点。
比如如果用于页面展示的表达式同步执行的话,碰到耗时的网络请求就会造成页面卡顿,所以用于页面展示的小括号中的表达式都是异步执行的,我们希望它们快速完成,马上展示给用户看。
再比如如果一个事件中有多个网络请求,它们直接互相不依赖,如果同步执行的话就会一个网络请求完成后再执行下一个请求,花费比较多的时间。如果异步执行就会把多个请求一起发送出去,各自执行各自的,互不相干,互不等待,就能提高整体执行效率,降低所消耗的时间。
还一种场景是load()了个外部JS库,如果这个JS库是用then来接受调用结果的的异步函数,那就只能把这个调用过程放到异步函数excA()里执行了,因为众触内部的同步执行是用await,返回的是一个承诺(Promise)。

异步函数

目前只有3个异步函数:excA()funcA()forEachA()。都有对应的同步函数(函数名没有A)。

由众触低代码平台生成和驱动