Revert "Remove legacy iterator protocol use in Zotero.DB"
Reverting this until we can use Fx60 for testing.
This reverts commit dfe412d448
.
This commit is contained in:
parent
2dce5f4842
commit
143fdd5f2b
2 changed files with 16 additions and 12 deletions
|
@ -584,18 +584,22 @@ Zotero.DBConnection.prototype.queryAsync = Zotero.Promise.coroutine(function* (s
|
|||
}
|
||||
var failed = false;
|
||||
if (options && options.onRow) {
|
||||
// Wrap onRow to cancel iteration by default and reject the promise
|
||||
// on any error, which Sqlite.jsm does not do.
|
||||
onRow = function (row, cancel) {
|
||||
// Errors in onRow don't stop the query unless StopIteration is thrown
|
||||
onRow = function (row) {
|
||||
try {
|
||||
options.onRow(row, () => {
|
||||
Zotero.debug("Query cancelled", 3);
|
||||
cancel();
|
||||
});
|
||||
options.onRow(row);
|
||||
}
|
||||
catch (e) {
|
||||
failed = e;
|
||||
cancel();
|
||||
// If the onRow throws a StopIteration, stop gracefully
|
||||
if (e instanceof StopIteration) {
|
||||
Zotero.debug("Query cancelled", 3);
|
||||
}
|
||||
// Otherwise, mark the promise as rejected, which Sqlite.jsm doesn't do
|
||||
// on a StopIteration by default
|
||||
else {
|
||||
failed = e;
|
||||
}
|
||||
throw StopIteration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -151,16 +151,16 @@ describe("Zotero.DB", function() {
|
|||
assert.equal(e.message, "Failed");
|
||||
});
|
||||
|
||||
it("should stop gracefully if onRow is cancelled", function* () {
|
||||
it("should stop gracefully if onRow throws a StopIteration", function* () {
|
||||
var i = 0;
|
||||
var rows = [];
|
||||
yield Zotero.DB.queryAsync(
|
||||
"SELECT * FROM " + tmpTable,
|
||||
false,
|
||||
{
|
||||
onRow: function (row, cancel) {
|
||||
onRow: function (row) {
|
||||
if (i > 0) {
|
||||
return cancel();
|
||||
throw StopIteration;
|
||||
}
|
||||
rows.push(row.getResultByIndex(0));
|
||||
i++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue