function taskFirst(k, v, next) {
console.log(k, v);
next(null, 'ok1');
}
function taskSecond(k, v, next) {
console.log(k, v);
next(null, 'ok2');
}
function run() {
var g1 = "Something";
var g2 = "Something";
var g3 = "Something";
var g4 = "Something";
async.series([
taskFirst.bind(null, g1, g2),
taskSecond.bind(null, g3, g4)
], function(error, result){
}
);
}
;function(){}()
недопустима - синтаксическая ошибка, зато допустима !function(){}()
, и это на байт короче (function(){})()
. Ну основные подходы вы перечислили.
За yield, генераторами и обертками над ними - будующее, но пока они доступны только в нестабильной ветке 0.11. Fibers - попытка их эмулировать, мне не очень нравится, да и смысл, если скоро генераторы появятся в стабильной ветке? Q и прочие промисы - хорошая штука, но в js по старой привычке использую async.
Текущие проекты пишу на LiveScript, в нем с последовательными асинхронными операциями помогает такая штука, как backcall'ы, пример.
function run(){
var args=$.map(arguments,function(arg,i){
switch(typeof arg){
case 'number':arg=[arg];
case 'object':
var el=$('#control'+arg[0]),cond=arg[1];
return function(){
el.click(function(){
if(el.attr('status')==(cond==null?el.attr('pass'):cond)){
el.unbind('click');
args[i+1]()}})}}
return arg});
args[0]()}
run(1,2,10,1,[9,3],alert.bind(null,'Упражнение выполнено верно'))
var rez=[]
for(var key in obj)if(obj[key].indexOf(7)==-1)rez.push(key);
app.trigger('load'+data.component,data)
В компонентах на это событие:app.on('loadNews',function(data){/*парсим шаблон*/})
var Parent=function(){
this.par='par';};
Parent.prototype.parProto='parProto';
var Child=function(){
Parent.apply(this);
this.chld='chld';};
Child.prototype=Object.create(Parent.prototype);
Child.prototype.chldProto='chldProto';
var Current=function(){
Child.apply(this);}
Current.prototype=Object.create(Child.prototype);
var inst=new Current;