async框架源码研究

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async框架源码研究相关的知识,希望对你有一定的参考价值。

说来惭愧,之前没读过什么源码,今天尝试研究下async框架的源码,就从https://github.com/bsspirit/async_demo这个地方拉了一个async使用的demo来入手,好,一个一个js,一个一个函数来了解!

 

  • apply.js

async.apply是给一个函数预绑定多个参数并生成一个可直接调用的新函数,demo中所给出的例子是

技术分享
 1 function inc(a,b,callback,timeout){  //先定义一个加法函数
 2     var timeout = timeout || 200;
 3     t.wait(200);
 4     setTimeout(function() {
 5         callback(null, a+b);
 6     }, timeout);
 7 }
 8 var fn = async.apply(inc, 1, 2);  //调用apply函数且赋予其部分参数
 9 fn(function(err, n){
10     log(‘1.2 inc: ‘ + n);
11 },500);                 //调用apply返回的函数并补齐所需参数,即相当于调用inc函数
View Code

由此找到async.js中的apply函数

技术分享
1 async.apply = _restParam(function (fn, args) {
2     return _restParam(function (callArgs) {  //返回一个函数并带有调用该函数时所需参数
3         return fn.apply(
4             null, args.concat(callArgs)  //将调用所带参数与已有参数合并,接着传给自定义的函数(即之前的inc函数)
5         );
6     });
7 });
View Code

从以上内容可以看出,apply的实现原理就是返回一个带已有参数的函数,然后在调用该函数的时候再传入其余参数,最后去调用自定义的函数

 

以上是关于async框架源码研究的主要内容,如果未能解决你的问题,请参考以下文章

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

admui 框架源码 模板结构

研究c#异步操作async await状态机的总结

研究c#异步操作async await状态机的总结

HTML代码片段