Tôi có một chuỗi đơn giản của sự kiện:Chuỗi Jquery Promises
- Nhận Cột từ một bảng siêu dữ liệu (async)
- cột chọn tải (async)
- làm cho danh sách
Tôi đã từng chỉ sử dụng chuỗi các chức năng này, mỗi chức năng gọi là tiếp theo khi nó đã hoàn thành. Tuy nhiên, nó không phải là rất rõ ràng những gì đang xảy ra (gọi getColumnsFromMeta
kết quả trong quan điểm được dân cư). Vì vậy, vì lợi ích của sự rõ ràng và sử dụng lại mã tôi muốn cấu trúc lại chúng bằng cách sử dụng JQuery
Promises
. Tôi đã sử dụng lời hứa trước đây. Nhưng làm cách nào để chuỗi hơn hai? getColumnsFromMeta().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;
Dưới đây là một ví dụ về getColumnsFromMeta
:
var getColumnsFromMeta = function(id)
{
var sql,
dfd;
dfd = $.Deferred();
var onSuccess = function(tx, result)
{
var columns = [];
for (var i = 0; i < result.rows.length; i++)
{
columns.push(result.rows.item(i).Column);
}
dfd.resolve(columns);
};
var onError = function(tx, error)
{
dfd.reject(error);
};
sql = "SELECT Column FROM Meta WHERE id = ?";
database.query(sql, [id], onSuccess, onError);
return dfd.promise();
};
Cảm ơn bạn đã trả lời nhanh nó hoạt động rất tốt! Và cảm ơn cho bài viết, nó có vẻ tốt. Là một câu hỏi bổ sung: có thể chuỗi .done/.always vv trên đường ống ở các giai đoạn khác nhau không? – JonWells
@CrimsonChin: vâng. PS: cho tôi một giây, jsfiddle sẽ được thực hiện trong một thời điểm – zerkms
@CrimsonChin: có, bạn có thể sử dụng bất kỳ của chúng, miễn là 'ống()' trả về chậm là tốt. PS: Tôi đã thêm ví dụ jsfiddle – zerkms