Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng lời hứa để xử lý giá trị trả về MySQL trong node.js

Chuyện này sẽ hơi phân tán một chút, thứ lỗi cho tôi.

Đầu tiên, giả sử mã này sử dụng đúng API trình điều khiển mysql, đây là một cách bạn có thể kết hợp nó để hoạt động với một lời hứa gốc:

function getLastRecord(name)
{
    return new Promise(function(resolve, reject) {
        // The Promise constructor should catch any errors thrown on
        // this tick. Alternately, try/catch and reject(err) on catch.
        var connection = getMySQL_connection();

        var query_str =
        "SELECT name, " +
        "FROM records " +   
        "WHERE (name = ?) " +
        "LIMIT 1 ";

        var query_var = [name];

        connection.query(query_str, query_var, function (err, rows, fields) {
            // Call reject on error states,
            // call resolve with results
            if (err) {
                return reject(err);
            }
            resolve(rows);
        });
    });
}

getLastRecord('name_record').then(function(rows) {
    // now you have your rows, you can see if there are <20 of them
}).catch((err) => setImmediate(() => { throw err; })); // Throw async to escape the promise chain

Vì vậy, một điều:Bạn vẫn có các cuộc gọi lại. Lệnh gọi lại chỉ là các hàm mà bạn đưa cho một thứ gì đó để gọi vào một thời điểm nào đó trong tương lai với các đối số do nó lựa chọn. Vì vậy, các đối số của hàm trong xs.map(fn) , (err, result) các hàm được thấy trong nút và kết quả hứa và trình xử lý lỗi đều là lệnh gọi lại. Điều này hơi gây nhầm lẫn bởi mọi người đề cập đến một loại gọi lại cụ thể là "gọi lại", loại của (err, result) được sử dụng trong lõi nút trong cái gọi là "kiểu truyền tiếp tục", đôi khi được những người không thực sự thích chúng gọi là "nút lùi".

Hiện tại, ít nhất (async / await cuối cùng cũng đến), bạn đang gặp khá nhiều khó khăn với các lệnh gọi lại, bất kể bạn có chấp nhận lời hứa hay không.

Ngoài ra, tôi sẽ lưu ý rằng những lời hứa không phải là ngay lập tức, rõ ràng là hữu ích ở đây, vì bạn vẫn có một cuộc gọi lại. Lời hứa chỉ thực sự tỏa sáng khi bạn kết hợp chúng với Promise.all và hứa với bộ tích lũy là Array.prototype.reduce . Nhưng họ làm đôi khi tỏa sáng, và chúng đáng học hỏi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phát hiện các sự kiện Sleep và Wake Up của hệ điều hành trong Java

  2. ĐẶT HÀNG THEO ngày giờ TRƯỚC NHÓM THEO tên trong mysql

  3. Có thể di chuyển một bản ghi từ bảng này sang bảng khác bằng cách sử dụng một câu lệnh SQL không?

  4. Kết nối với cơ sở dữ liệu mysql 5.0 bằng vbscript thuần túy?

  5. Ví dụ về cách sử dụng bind_result và get_result