Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pytania z synchronicznego node.js

Istnieje kilka wzorców projektowych, których można użyć w node.js do uruchamiania sekwencyjnych operacji asynchronicznych. We wszystkich z nich nie można uruchomić ciasnej pętli, czekając, aż coś się wydarzy - musisz pozwolić działać pojedynczemu wątkowi JavaScript w node.js i dać mu jak najwięcej cykli.

Iteracja ręczna

Umieść kod iteracji w funkcji lokalnej (zwykle nazywam to next() ), a następnie, gdy jedna iteracja wywołuje ostatnią funkcję uzupełniania, możesz wywołać next() ponownie, aby rozpocząć kolejną iterację. Możesz zakończyć operację testując jakiś warunek i nie wywołując next() jeśli coś zostało zrobione lub pierwsze wiersze next() może przetestować, aby sprawdzić, czy skończyłeś.

Zobacz poniższy przykład kodu, aby zobaczyć, jak Twój kod będzie wyglądał przy ręcznej iteracji.

Obietnice sekwencji

Jeśli używasz obietnic do operacji asynchronicznych, możesz pozwolić, aby połączone obietnice wykonały za Ciebie całe sekwencjonowanie, jak w p().then(f1).then(f2).then(f3) . Przykład tego możesz zobaczyć w tej odpowiedzi:Obietnice, takie jak async.each .

Użyj modułu asynchronicznego

Moduł Async obsługuje wiele funkcji zarządzania asynchronicznego. Wielu uważa to za bardzo przydatne - inni woleliby wykorzystać obietnice do rozwiązania podobnych problemów. W każdym razie ma wiele różnych funkcji sekwencjonowania. Na przykład, jeśli chcesz iterować tablicę asynchronicznie, użyj czegoś takiego:

async.eachSeries(hugeArray, function iterator(item, callback) {
  if (inCache(item)) {
    callback(null, cache[item]); // if many items are cached, you'll overflow
  } else {
    doSomeIO(item, callback);
  }
}, function done() {
  //...
});

Oto wersja Twojego kodu, która wykonuje ręczną iterację przy użyciu niestandardowej next() funkcja iteracji.

function runQuery(callback) {
    mysql.getConnection(function(err, connection) {
        if (err) {
            connection.release();
            callback(err);
            return;
        }

        var array = [];
        var count = 10;
        var index = 0;

        function next() {
            if (index++ < count) {
                array.push([index, 'master']);
                console.log('100-elements');
                connection.beginTransaction(function(err) {
                    if (err) {
                        // can't throw here in an async function
                        // use callback to communicate error
                        callback(err);
                        return;
                    }

                    var query = "insert into users(username, password) values ?";
                    connection.query(query, [array], function(err, rows) {

                        if (!err) {
                            //commit start
                            connection.commit(function() {
                                if (err) {
                                    console.error(err);
                                    connection.rollback(function() {
                                        console.error('rollback error');
                                        callback(err);
                                        return;
                                    });
                                } else {
                                    console.log("Commit");
                                    // now do the next iteration
                                    next();
                                } // if err
                            }); //commit end
                        } else {
                            console.log(err);
                            connection.rollback(function() {
                                callback(err);
                                return;
                            });
                        } // if                    
                    });
                });
            }
        }
    });
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę streścić przygotowane instrukcje mysqli w PHP?

  2. Mysql ERROR 1241 (21000):Operand powinien zawierać 1 kolumnę (kolumny)

  3. Korzystanie z prostego dostawcy członkostwa z mysql

  4. c# Problem z mysql :Nieprawidłowy kod wartości ciągu 1366 dla kolumny w wierszu 1

  5. PHP:Dynamiczne rozwijane z optgroup