Zoeken…


Syntaxis

  • Elke callback moet met deze syntaxis worden geschreven:

  • functie callback (fout, resultaat [, arg1 [, ...]])

  • Op deze manier bent u gedwongen om de fout eerst te retourneren en kunt u niet negeren dat u ze later behandelt. null is de conventie zonder fouten

  • callback (null, myResult);

  • Uw callbacks kunnen meer argumenten bevatten dan fout en resultaat , maar het is alleen nuttig voor een specifieke set functies (waterval, seq, ...)

  • callback (null, myResult, myCustomArgument);

  • En natuurlijk fouten verzenden. U moet het doen en fouten afhandelen (of ten minste registreren).

  • callback (err);

Parallel: multi-tasking

async.parallel (taken, afterTasksCallback) voert een reeks taken parallel uit en wacht het einde van alle taken (gemeld door de call of callback- functie).

Wanneer taken zijn voltooid, roept async de hoofdterugroep met alle fouten en alle resultaten van taken op.

function shortTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfShortTime');
  }, 200);
}

function mediumTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfMediumTime');
  }, 500);
}

function longTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfLongTime');
  }, 1000);
}

async.parallel([
    shortTimeFunction,
    mediumTimeFunction,
    longTimeFunction
  ],
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(results);
  });

Resultaat: ["resultOfShortTime", "resultOfMediumTime", "resultOfLongTime"] .

Roep async.parallel() met een object

U kunt de parameter taken reeks te vervangen door een object. In dit geval zijn de resultaten ook een object met dezelfde toetsen als taken .

Het is erg handig om enkele taken te berekenen en elk resultaat gemakkelijk te vinden.

async.parallel({
    short: shortTimeFunction,
    medium: mediumTimeFunction,
    long: longTimeFunction
  },
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(results);
  });

Resultaat: {short: "resultOfShortTime", medium: "resultOfMediumTime", long: "resultOfLongTime"} .

Meerdere waarden oplossen

Elke parallelle functie wordt teruggebeld. Deze callback kan een fout als eerste argument retourneren of succeswaarden daarna. Als een callback verschillende succeswaarden wordt doorgegeven, worden deze resultaten als een array geretourneerd.

async.parallel({
    short: function shortTimeFunction(callback) {
      setTimeout(function() {
        callback(null, 'resultOfShortTime1', 'resultOfShortTime2');
      }, 200);
    },
    medium: function mediumTimeFunction(callback) {
      setTimeout(function() {
        callback(null, 'resultOfMediumTime1', 'resultOfMeiumTime2');
      }, 500);
    }
  },
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(results);
  });

Resultaat :

{
    short: ["resultOfShortTime1", "resultOfShortTime2"], 
    medium: ["resultOfMediumTime1", "resultOfMediumTime2"]
}

.

Serie: onafhankelijke mono-tasking

async.series (taken, afterTasksCallback) zal een reeks taken uitvoeren. Elke taak wordt na de andere uitgevoerd. Als een taak mislukt, stopt asynchroon de uitvoering en springt u in de hoofdterugroep .

Wanneer taken met succes zijn voltooid, roept async de "master" callback met alle fouten en alle resultaten van taken aan.

function shortTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfShortTime');
  }, 200);
}

function mediumTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfMediumTime');
  }, 500);
}

function longTimeFunction(callback) {
  setTimeout(function() {
    callback(null, 'resultOfLongTime');
  }, 1000);
}

async.series([
    mediumTimeFunction,
    shortTimeFunction,
    longTimeFunction
  ],
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(results);
  });

Resultaat: ["resultOfMediumTime", "resultOfShortTime", "resultOfLongTime"] .

Roep async.series() met een object

U kunt de parameter taken reeks te vervangen door een object. In dit geval zijn de resultaten ook een object met dezelfde toetsen als taken .

Het is erg handig om enkele taken te berekenen en elk resultaat gemakkelijk te vinden.

async.series({
    short: shortTimeFunction,
    medium: mediumTimeFunction,
    long: longTimeFunction
  },
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(results);
  });

Resultaat: {short: "resultOfShortTime", medium: "resultOfMediumTime", long: "resultOfLongTime"} .

Waterval: afhankelijke mono-tasking

async.waterfall (taken, afterTasksCallback) zal een reeks taken uitvoeren. Elke taak wordt na de andere uitgevoerd en het resultaat van een taak wordt doorgegeven aan de volgende taak . Async.series () , als een taak mislukt, stopt async de uitvoering en roept onmiddellijk de hoofdterugroep op.

Wanneer taken met succes zijn voltooid, roept async de "master" callback met alle fouten en alle resultaten van taken aan.

function getUserRequest(callback) {
  // We simulate the request with a timeout
  setTimeout(function() {
    var userResult = {
      name : 'Aamu'
    };

    callback(null, userResult);
  }, 500);
}

function getUserFriendsRequest(user, callback) {
  // Another request simulate with a timeout
  setTimeout(function() {
    var friendsResult = [];

    if (user.name === "Aamu"){
        friendsResult = [{
          name : 'Alice'
        }, {
          name: 'Bob'
        }];
    }
    
    callback(null, friendsResult);
  }, 500);
}

async.waterfall([
    getUserRequest,
    getUserFriendsRequest
  ],
  function(err, results) {
    if (err) {
      return console.error(err);
    }

    console.log(JSON.stringify(results));
  });

Resultaat: results bevat de tweede callback-parameter van de laatste functie van de waterval, in dat geval friendsResult .

async.times (Om lus beter af te handelen)

Om een functie in een lus in node.js uit te voeren, is het prima om een for lus te gebruiken voor korte lussen. Maar de lus is lang, het gebruik van for lus verlengt de verwerkingstijd, waardoor het knooppuntproces mogelijk vastloopt. In dergelijke scenario's kunt u: asycn.times gebruiken

function recursiveAction(n, callback)
{
    //do whatever want to do repeatedly
    callback(err, result);
}
async.times(5, function(n, next) {
    recursiveAction(n, function(err, result) {
        next(err, result);
    });
}, function(err, results) {
    // we should now have 5 result
});

Dit wordt parallel genoemd. Gebruik: async.timesSeries als we het één voor één willen noemen

async.each (Om een reeks gegevens efficiënt te verwerken)

Als we een reeks gegevens willen verwerken, is het beter om async.each te gebruiken. Als we iets met alle gegevens willen uitvoeren en de laatste callback willen krijgen als alles klaar is, dan is deze methode nuttig. Dit wordt parallel behandeld.

function createUser(userName, callback)
{
    //create user in db
    callback(null)//or error based on creation
}

var arrayOfData = ['Ritu', 'Sid', 'Tom'];
async.each(arrayOfData, function(eachUserName, callback) {

    // Perform operation on each user.
    console.log('Creating user '+eachUserName);
    //Returning callback is must. Else it wont get the final callback, even if we miss to return one callback
    createUser(eachUserName, callback);
  
}, function(err) {
    //If any of the user creation failed may throw error.
    if( err ) {
      // One of the iterations produced an error.
      // All processing will now stop.
      console.log('unable to create user');
    } else {
      console.log('All user created successfully');
    }
});

U kunt async.eachSeries één voor één gebruiken

async.series (Om gebeurtenissen één voor één af te handelen)

/ In async.series worden alle functies in serie uitgevoerd en worden de geconsolideerde uitgangen van elke functie doorgegeven aan de laatste callback. bijv. /

var async = vereisen ('async'); async.series ([function (callback) {console.log ('First Execute ..'); callback (null, 'userPersonalData');}, function (callback) {console.log ('Second Execute ..'); callback (null, 'userDependentData');}], functie (fout, resultaat) {console.log (resultaat);});

// Output:

Eerste uitvoering .. Tweede uitvoering .. ['userPersonalData', 'userDependentData'] // result



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow