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;
|
var failed = false;
|
||||||
if (options && options.onRow) {
|
if (options && options.onRow) {
|
||||||
// Wrap onRow to cancel iteration by default and reject the promise
|
// Errors in onRow don't stop the query unless StopIteration is thrown
|
||||||
// on any error, which Sqlite.jsm does not do.
|
onRow = function (row) {
|
||||||
onRow = function (row, cancel) {
|
|
||||||
try {
|
try {
|
||||||
options.onRow(row, () => {
|
options.onRow(row);
|
||||||
Zotero.debug("Query cancelled", 3);
|
|
||||||
cancel();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
failed = e;
|
// If the onRow throws a StopIteration, stop gracefully
|
||||||
cancel();
|
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");
|
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 i = 0;
|
||||||
var rows = [];
|
var rows = [];
|
||||||
yield Zotero.DB.queryAsync(
|
yield Zotero.DB.queryAsync(
|
||||||
"SELECT * FROM " + tmpTable,
|
"SELECT * FROM " + tmpTable,
|
||||||
false,
|
false,
|
||||||
{
|
{
|
||||||
onRow: function (row, cancel) {
|
onRow: function (row) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
return cancel();
|
throw StopIteration;
|
||||||
}
|
}
|
||||||
rows.push(row.getResultByIndex(0));
|
rows.push(row.getResultByIndex(0));
|
||||||
i++;
|
i++;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue