【cocos2d-js官方文档】六、cc.async

来源:互联网 发布:mac windows 共享软件 编辑:程序博客网 时间:2024/05/16 08:26

概述

该单例模仿的是nodejsasync模块,只抽取了parallelmap这两个api,今后可能会根据需求继续添加。该单例的目的是简化异步调用的代码书写。

cc.async.parallel

异步执行多个任务。在H5中多为HTTP请求。

参数:

nametyperemarktasksArray必填,数组里的每一项都是一个functionoptionObject/Function选填,该参数在nodejs的async模块中是没有的,这里作为拓展参数。当为方法时作为触发器使用,为Object的时候结构为:{cb:function, cbTarget:object/null, trigger:function, triggerTarget:object/null}cbFunction选填,所有异步调用结束后的总回调函数

用法1:

cc.async.parallel([    function(cb){        cb(null, "a");//此处代替异步调用方法    },    function(cb){        cb(null, "B");//此处代替异步调用方法    }], function(err, results){    if(err) throw err;//error    console.log(results);//["a", "B"]});

用法2:

cc.async.parallel([    function(cb){        cb(null, "a");//此处代替异步调用方法    },    function(cb){        cb(null, "B");//此处代替异步调用方法    }], function(item, count, totalNum){    console.log(item, count, totalNum);}, function(err, results){    if(err) return console.error(err);    console.log(results);//["a", "B"]});

用法3:

var tempObj = {    name : "TempObj",    trigger : function(item, count, totalNum){        console.log(this.name);//TempObj        console.log(item, count, totalNum);    },    cb : function(err, results){        if(err) return console.error(err);        console.log(this.name);//TempObj        console.log(results);//["a", "B"]    }};var option = {    trigger : tempObj.trigger,    triggerTarget : tempObj,    cb : tempObj.cb,    cbTarget : tempObj};cc.async.parallel([    function(cb){        cb(null, "a");//此处代替异步调用方法    },    function(cb){        cb(null, "B");//此处代替异步调用方法    }], option);

cc.async.map

参数:

nametyperemarktasksArray/Object必填,数组里的每一项都是一个functionoptionObject/Function必填,该参数与nodejs的async模块有所不同,这里作为拓展参数。当为方法时作为iterator使用,为Object的时候结构为:{cb:function, cbTarget:object/null, iterator:function, iteratorTarget:object/null}cbFunction选填,所有异步调用结束后的总回调函数。当tasks为数组时,返回的results为数组,如果tasks是object,则返回的results也为一个object,并且每个key对应其返回结果。

用法1:

cc.async.map(["a", "B"], function(item, index, cb){    console.log(this.name);//TempObj    cb(null, index + ":" + item);//此处代替异步调用方法}, function(err, results){    if(err) return console.error(err);    console.log(results);//[ '0:a', '1:B' ]});

用法2:

cc.async.map({a:"a", b:"B"}, function(item, key, cb){    cb(null, key + ":" + item);//此处代替异步调用方法}, function(err, results){    if(err) return console.error(err);    console.log(results);//{ a: 'a:a', b: 'b:B' }});

用法3:

var tempObj = {    name : "TempObj",    iterator : function(item, key, cb){        cb(null, key + ":" + item);//此处代替异步调用方法    },    cb : function(err, results){        if(err) return console.error(err);        console.log(this.name);//TempObj        console.log(results);//{ a: 'a:a', b: 'b:B' }    }};var option = {    iterator : tempObj.iterator,    iteratorTarget : tempObj,    cb : tempObj.cb,    cbTarget : tempObj};
转载自:cocos2dx开发网
0 0