2021SC@SDUSC amis代码分析(12)

本文介绍了 amis 库中用于异步处理的常用方法,如 apply、applyEach、applyEachSeries、auto、compose 和 waterfall。这些方法分别适用于不同场景,如预绑定参数、并行与串行执行任务、处理依赖关系的任务等。通过对 amis 的学习,作者解决了以往在处理异步操作时遇到的问题,打算在今后的项目中应用这个库。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

概述

本周我学习了amis中用作异步请求的处理库Async,其拥有很强大的功能。

在之前的对于异步请求的操作,包括串行与并行,我一般使用层层回调递归的方式,倘若在串行执行时,异步的任务过多就会形成我们常说的死亡递归,这样的代码不好理解的同时极难维护;在学习了ES6之后,我又常采用async/await的方法,虽说很容易实现串行执行,在并行执行又有很大的限制;两者结合起来只会使结构更加臃肿。因此,在Async中就给出了很好的解决方案。

以下是我总结的常用的Acyns中常用的方法:

常用函数

apply

想想这种情况,对于一个函数,含有若干个参数,在某一段时间内,该函数的前许几个参数总是保持着同样的值,若是对于该函数有较多次数的调用,是不是每一次都需要传入这些相同值,相对来是比较麻烦的。而apply就是一个非常好用的函数,可以让我们给一个函数预绑定多个参数并生成一个可直接调用的新函数。

function inc(a,b,callback,timeout){
   
    var timeout = timeout || 200;
    t.wait(200);
    setTimeout(function() {
   
        callback(null, a+b);
    }, timeout);
}
// inc 的前两个参数 a,b 若保持不变,故提前传参,并生成新的调用函数
var fn = async.apply(inc, 1, 2);
fn(function(err, n){
   
    log('1.2 inc: ' + n);
}); // 后续只需要参入还未有的参数
applyEach | applyEachSeries

apply的扩展,同时处理多个类似的函数。同时为多个拥有相同参数值的函数传入参数,并且将产生的结果收集一起给回调函数。
applyEach(fns, args..., callback)
fns 是所有需要执行的函数的集合,有用同样的参数形式,fn(inputs,callback),且callback必须使用到。
args是提前给所有函数的前若干参数
callback是所有函数运行完毕后再运行的,callback(err,values),其中,values是每个函数产生的结果,按位次顺序的数组类型。
applyEachSeries与它的区别是串行执行的

let f = async.applyEach(
  [
    function (name, cb) {
   
      setTimeout(function () {
   
        log('1.1 handler: ' + name + ' A');
        cb(null, name); // 必须使用,传回 name
      }, 500);
    },
    function (name, cb) {
   
      setTimeout(function () {
   
        log('1.1 handler: ' + name + ' B');
        cb(null, name);
      }, 150);
    },
  ],
  'Hello'
);
f(function (err, values) {
   
  log(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值