Γρήγορη αναφορά

co Generator Ασύγχρονος έλεγχος ροής Cheat Sheet

Συνοπτικός οδηγός για το co στο Node.js: εκτέλεση γεννητριών, co.wrap, thunks και μετατροπές promises.

· Δημοσιεύτηκε

co Το co είναι η κλασική βιβλιοθήκη ασύγχρονου ελέγχου ροής που άνοιξε το δρόμο για τη σύγχρονη σύνταξη async/await στη JavaScript.

Εκτέλεση γεννητριών

const co = require('co');

co(function* () {
  const result = yield Promise.resolve(42);
  return result * 2;
}).then(val => {
  console.log(val); // 84
}).catch(err => {
  console.error(err);
});

Μια γεννήτρια μπορεί να κάνει yield Promises, thunks, πίνακες ή αντικείμενα. Το co() εκτελεί τη γεννήτρια μέχρι την ολοκλήρωσή της.


Μετατροπή γεννήτριας σε επαναχρησιμοποιήσιμη συνάρτηση Promise (co.wrap)

Μετατρέπει μια γεννήτρια σε κανονική συνάρτηση που επιστρέφει Promise (ταυτόσημη με τη σύγχρονη async function):

const getUser = co.wrap(function* (id) {
  const user = yield db.users.findById(id);
  const posts = yield db.posts.findByUser(user.id);
  return { user, posts };
});

// Η κλήση επιστρέφει κανονικό Promise:
getUser(123).then(data => {
  console.log(data);
});

Συνεργασία με Node.js Callback APIs

Χρήση του thunkify ή σύγχρονων βιβλιοθηκών promisify:

const thunkify = require('thunkify');
const fs = require('fs');

const readFile = thunkify(fs.readFile);

co(function* () {
  const content = yield readFile('config.json', 'utf8');
  console.log(JSON.parse(content));
});

Παράλληλη εκτέλεση (Πίνακες & Αντικείμενα)

co(function* () {
  // Παράλληλη επίλυση σε πίνακα
  const [user, profile] = yield [fetchUser(), fetchProfile()];

  // Παράλληλη επίλυση σε αντικείμενο
  const data = yield {
    user: fetchUser(),
    profile: fetchProfile()
  };
  console.log(data.user, data.profile);
});

Σχετικά θέματα