2021SC@SDUSC
目录
2.(static) makeRequestTask(url, responseType opt) → {clay.async.Task|Array.}
3.(static) makeTask() → {clay.async.Task}
4.after(name, action, context opt)
5.before(name, action, context opt)
7.has(name, action) → {boolean}
clay.async.Task类是对异步任务的处理,从而处理claygl中有关的任务。
clay.async.Task类能够处理异步任务,包括接收任务,创建任务,设置任务发生前后,事件出错时所触发的事件,以及判断任务是否完成,及其成功或失败,并且可以判断有无该任务等
该函数为Task类的构造函数,无参数
其源代码如下:
function Task() {
this._fullfilled = false;
this._rejected = false;
}
从源代码可以看出,Task类内部有两个成员变量,即_fullfilled和_rejected,当对象构造时,两个成员变量会被初始化,并赋值false。
该函数的作用是创建一个vendor.request任务。
参数有url和responseType,url的类型为string或object或Array.<object>或Array.<string>,responseType的类型为string
其源代码为:
Task.makeRequestTask = function(url, responseType) {
if (typeof url === 'string') {
return makeRequestTask(url, responseType);
}
else if (url.url) { // Configure object
var obj = url;
return makeRequestTask(obj.url, obj.responseType);
}
else if (Array.isArray(url)) { // Url list
var urlList = url;
var tasks = [];
urlList.forEach(function(obj) {
var url, responseType;
if (typeof obj === 'string') {
url = obj;
}
else if (Object(obj) === obj) {
url = obj.url;
responseType = obj.responseType;
}
tasks.push(makeRequestTask(url, responseType));
});
return tasks;
}
}
从源代码中可以看出,该函数首先判断url的类型是否为string,若是则执行makeRequestTask(url, responseType),makeRequestTask(url, responseType)的代码如下:
function makeRequestTask(url, responseType) {
var task = new Task();
vendor.request.get({
url: url,
responseType: responseType,
onload: function(res) {
task.resolve(res);
},
onerror: function(error) {
task.reject(error);
}
});
return task;
}
该函数首先创建一个Task对象,并赋值给task局部变量,接着调用vendor.request.get方法,其中接收的url为形参的url,接收的responseType为形参的responseType,onload方法执行调用task的resolve方法,表示处理资源,onerror方法执行调用task的reject方法,表示处理错误异常。最后返回task对象。
若url的类型为对象,则将url赋值给新建的对象obj,继续执行makeRequestTask(obj.url, obj.responseType)方法,形参为obj的url和responseType。
若url为数组,则创建一个urlList并赋值url,同时创建一个tasks数组,对urlList中的每个对象进行遍历,创建url和responseType局部变量,若obj的类型为string,则将obj赋值给url,若为对象,则将obj的url赋值给url,将obj的respType赋值给responseType。
最后,执行makeRequestTask(url, responseType)方法,并将返回值加入到tasks数组中,并返回tasks数组。
该函数的作用是创建一个task任务,为静态类型,可直接调用。
无参数。
其源代码为:
Task.makeTask = function() {
return new Task();
}
该函数创建一个Task对象并返回该对象。
该函数的作用是设置事件触发后的动作。
参数为name,类型为string,表示事件触发后的动作的名称,action,类型为function,表示事件触发后的动作的函数,context,类型为object,表示事件触发后的动作的内容。
其源代码如下:
after: function(name, action, context) {
if (!name || !action) {
return;
}
name = 'after' + name;
return this.on(name, action, context);
}
从源代码中可以看出,该函数首先判断name和action是否存在,若其中一个不存在,则直接返回,若存在,则在name前加入字符串‘after’,并调用本对象的on(name, action, context)方法,从而实现事件触发后的动作
该函数的作用是设置事件触发前的动作。
参数为name,类型为string,表示事件触发前的动作的名称,action,类型为function,表示事件触发前的动作的函数,context,类型为object,表示事件触发前的动作的内容。
其源代码如下:
before: function(name, action, context) {
if (!name || !action) {
return;
}
name = 'before' + name;
return this.on(name, action, context);
}
从源代码中可以看出,该函数首先判断name和action是否存在,若其中一个不存在,则直接返回,若存在,则在name前加入字符串‘before’,并调用本对象的on(name, action, context)方法,从而实现事件触发前的动作
该函数的作用是设置事件发生错误触发的动作。
action,类型为function,表示事件发生错误触发的函数,context,类型为object,表示事件发生错误触发的内容。
其源代码如下:
error: function(action, context) {
return this.once('error', action, context);
}
从源代码中可以看出,该函数直接调用本对象的once方法,name为‘error’,另外两个参数为方法的形参,从而实现错误的处理。
该函数的作用是判断是否注册事件驱动程序。
参数为name,类型为string,表示事件的名称,action,类型为function,表示事件执行的方法。
其源代码如下:
has: function(name, action) {
var handlers = this.__handlers__;
if (! handlers ||
! handlers[name]) {
return false;
}
var hdls = handlers[name];
for (var i = 0; i < hdls.length; i++) {
if (hdls[i].action === action) {
return true;
}
}
}
从源代码可以看出,首先将本对象的__handlers__成员变量赋值给新建的对象handlers,判断handlers是否存在和handlers中是否存在name的对象,若其中一个条件不满足,则返回false。接着,将handlers中名为name的对象赋给新变量hdls,对hdls进行遍历,若hdls中某一对象的action与形参的action相同,则返回true,从而判断name对象是否有action方法,进而判断是否注册事件驱动程序。
该函数判断任务是否成功。
无参数。
其源代码如下:
Task.prototype.isFullfilled = function() {
return this._fullfilled;
}
该函数返回本对象的_fullfilled成员变量。
该函数判断任务是否失败。
无参数。
其源代码如下:
Task.prototype.isRejected = function() {
return this._rejected;
}
该函数返回本对象的_rejected成员变量。
该函数判断任务是否完成,即要么失败,要么成功。
无参数。
其源代码如下:
Task.prototype.isSettled = function() {
return this._fullfilled || this._rejected;
}
该函数返回本对象的_rejected和_fullfilled成员变量的或。