Qual é o propósito do co node.biblioteca js?

Sou novo nodo.js e am estão trabalhando em uma base de código, que está fazendo uso da biblioteca co, embrulhando chamadas para funções geradoras. Um exemplo simplificado se parece com este:

module.exports.gatherData = function*()
{
  // let img = //get the 1 pixel image from somewhere
  // this.type = "image/gif";
  // this.body = img;

  co(saveData(this.query));
  return;

};

function *saveData(query)
{   
  if(query.sid && query.url)
  {
      // save the data
  }
}
Então fui à página principal do co em github e a descrição diz:

" Generator based control flow goodness for nodejs and the browser, using promises, letting you write non-blocking code in a nice-ish way."

este código não seria não-bloqueador também na contexto do nó.js?

yield saveData(this.query)
Author: Milen Kovachev, 2016-07-08

1 answers

Não há nada que bloqueie / não bloqueie as funções do gerador. São apenas uma ferramenta para expressar fluxo de controle interruptível.

Como o fluxo é interrompido só é determinado pelo chamador do gerador, neste caso a biblioteca co que espera por valores assíncronos quando são cedidos. Há muitas maneiras de esfolar este gato com co:

  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield saveData(this.query));
    });
    var saveData = co.coroutine(function* (query) {   
      if(query.sid && query.url) {
          // save the data
      }
    });
    
  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield co(saveData(this.query));
    });
    function *saveData(query) {   
      if(query.sid && query.url) {
          // save the data
      }
    }
    
  • module.exports.gatherData = co.coroutine(function*() {
      …
      yield* saveData(this.query));
    });
    function *saveData(query) {   
      if(query.sid && query.url) {
          // save the data
      }
    }
    
 3
Author: Bergi, 2016-07-08 13:23:07