2015-06-23 2 views
2

Я хочу написать библиотеку в JavaScript, который может запустить такой код:Написать библиотеку в JavaScript, который может работать асинхронные функции последовательно

seq.next(function(done){ 
    setTimeout(done,3000); 
}).next(function(done){ 
    setTimeout(function(){ 
    console.log("hello"); 
    done(); 
    },4000); 
}).end(); //.next morever 

На самом деле я хочу написать библиотеку, которая может Выполнение выражений асинхронных функций в порядок (последовательно). Каждая асинхронная функция должна запускать функцию «done» на своем конце.

Может ли кто-нибудь мне помочь. Огромное спасибо!

+1

Я хочу написать эту библиотеку самостоятельно. –

+1

вы можете указать конец очереди по концу() –

ответ

2

Библиотека:

var seq = (function() { 

var myarray = []; 
var next = function (fn) { 
    myarray.push({ 
     fn: fn 
    }); 
    // Return the instance for chaining 
    return this; 
}; 

var end = function() { 
    var allFns = myarray; 

    (function recursive(index) { 
     var currentItem = allFns[index]; 


     // If end of queue, break 
     if (!currentItem) 
      return; 

     currentItem.fn.call(this, function() { 
      // Splice off this function from the main Queue 
      myarray.splice(myarray.indexOf(currentItem), 1); 
      // Call the next function 
      recursive(index); 
     }); 
    }(0)); 
    return this; 
} 

return { 
    next: next, 
    end: end 
}; 
}()); 

А использование этой библиотеки STH так:

seq.next(function (done) { 
      setTimeout(done, 4000); 
     }).next(function (done) { 
      console.log("hello"); 
      done(); 
     }).next(function (done) { 
      setTimeout(function() { 
       console.log('World!'); 
       done(); 
      }, 3000); 
     }).next(function (done) { 
      setTimeout(function() { 
       console.log("OK"); 
       done(); 
      }, 2000); 
     }).end(); 
+0

это написано с помощью очереди в javascript –

+0

нет способа указать конец функций, кроме как с помощью end() –

+0

У кого-нибудь есть лучший ответ на этот вопрос ? –

Смежные вопросы